/ / Кръстосано умножение на заявки - sql

Кръстосано умножаване на заявки - sql

обичам да получа серийните номера, които все още не са включени в таблицата Customer_Machine. но вместо това редове се размножават. това е моят код.

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 )

всяка помощ моля?

Отговори:

1 за отговор № 1

ако се присъедините Product и serial_number таблици, резултатите ще бъдат serial numbers which are in products but not in customer_machine, Тъй като горните отговори обработват този случай, тази заявка трябва да бъде избрана serial numbers which are not in customer_machine (както сте описали) с помощта на left join и игнорирайки Product таблица.

Sql-Server Fiddle демо

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 за отговор № 2

Това трябва да направите:

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)

Това, което правите сега, се присъединява към customer_machine за всеки serial_no от serial_number който не съвпада със същия номер от customer_machine; така че умножавате резултатите си.


0 за отговор № 3

Вероятно просто искате да изключите конкретните серийни номера, които вече съществуват, вместо да се присъедините към тях. Можете да направите това във вашата клауза където:

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 за отговор № 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