/ / Pomnażanie zapytań - sql

Multiplikacje krzyżowe - sql

lubię uzyskać numery seryjne, które nie są jeszcze uwzględnione w tabeli Customer_Machine. ale zamiast tego rzędy się krzyżują. to jest mój kod.

SELECT serial_number.serial_no
FROM   product
INNER JOIN serial_number
ON product.productid = serial_number.productid
INNER JOIN customer_machine
ON NOT( customer_machine.serial_no = serial_number.serial_no )

proszę o pomoc?

Odpowiedzi:

1 dla odpowiedzi № 1

jeśli dołączysz Product i serial_number tabele, wyniki będą serial numbers which are in products but not in customer_machine. Ponieważ powyższe odpowiedzi zajmują się tym przypadkiem, zapytanie to należy wybrać serial numbers which are not in customer_machine (zgodnie z opisem) za pomocą left join i ignorowanie Product stół.

Sql-Server fiddle demo

select s.serial_no
from serial_number s
left join customer_machine c on s.serial_no = c.serial_no
where c.serial_no is null

1 dla odpowiedzi nr 2

Powinno to zrobić:

SELECT serial_number.serial_no
FROM   product P
INNER JOIN serial_number S
ON P.productid = S.productid
WHERE NOT EXISTS (SELECT 1 FROM customer_machine
WHERE serial_no = S.serial_no)

To, co teraz robisz, dołącza do customer_machine za każdy serial_no od serial_number to nie pasuje do tego samego numeru customer_machine; więc mnożysz wyniki.


0 dla odpowiedzi № 3

Prawdopodobnie chcesz tylko wykluczyć konkretne numery seryjne, które już istnieją, zamiast dołączać je. Możesz to zrobić w swoim klauzuli where:

SELECT serial_number.serial_no
FROM   product
INNER JOIN serial_number
ON product.productid = serial_number.productid
WHERE serial_number.serial_no NOT IN ( SELECT customer_machine.serial_no
FROM customer_machine )

0 dla odpowiedzi nr 4
SELECT serial_number.serial_no
FROM   product
INNER JOIN serial_number
ON product.productid = serial_number.productid
LEFT JOIN customer_machine
ON ( customer_machine.serial_no = serial_number.serial_no)
WHERE customer_machine.serial_no IS NULL