クロス乗算クエリ - 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のバイブルのデモ

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

回答№2の場合は1

これにより、

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;あなたは結果を増やしています。


回答№3の場合は0

おそらく、すでに存在する特定のシリアル番号を参加させるのではなく、除外したいだけです。あなたは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 )

回答№4の場合は0
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