Mam dwa stoły, tblONE i tblTWO. Chcę sprawdzić, czy wartość przechowywana w Object.Name istnieje w którymkolwiek z nich. Wypróbowałem następujące polecenie:

            SQLCmd.CommandText = "SELECT Count(ID) FROM tblONE WHERE ID = '" & Object.Name & "' UNION ALL SELECT Count(ID) FROM tblTWO WHERE ID = '" & Object.Name & "'"

Jednak wydaje się, że wykonywany jest tylko pierwszy SELECT.

-1
E.B878 8 marzec 2020, 20:48

2 odpowiedzi

Najlepsza odpowiedź

Alternatywą byłoby

'Any of them contains the record?

SELECT
    count(*)
FROM
    tblONE left join tblTwo on tblOne.Id = tblTwo.Id ' or just tblOne, tblTwo
Where
    tblOne.Id = @id OR tblTwo.Id =@id;



'Which tale contains the Id?

Select
   T.fromTable
From
(
    SELECT Id, "Table1" as fromTable FROM tblONE Where tblOne.Id = @id;
    UNION ALL
    SELECT Id, "Table2" as fromTable FROM tblTwo Where tblTwo.Id = @id;
) T ' if both tables has the row, you get multiple rows.
0
Krish 8 marzec 2020, 20:04

Oto jedna metoda. Najpierw sprawdza w tblONE, a następnie w tblTWO:

SELECT IIF(Count(*) > 0, 1,
           (SELECT COUNT(*) FROM tblTWO WHERE ID = @ID) 
          )   
FROM tblONE
WHERE ID = @ID;

Lub inna alternatywa:

select iif(t1.cnt1 + t2.cnt2 > 0, 1, 0) as is present
from (select count(*) as cnt1
      from tblONE
      where id = @id
     ) as t1,  -- have to use , because MS Access does not support CROSS JOIN
     (select count(*) as cnt2
      from tblTWO
      where id = @id
     ) as t2
0
Gordon Linoff 8 marzec 2020, 19:13