/ / Перехресне множення запитів - 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 (як ви описали) використовуючи a left join ігноруючи Product стіл

Демонстрація скрипки Sql-Server

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