2013-03-13 80 views
0

我喜歡獲取尚未包含在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) 

任何幫助嗎?

+0

一些示例數據,所需的輸出等等 – 2013-03-13 18:35:27

回答

1

如果你加入Productserial_number表,結果將是serial numbers which are in products but not in customer_machine。由於上述答案處理該情況,因此此查詢將使用left join並忽略Product表來選擇serial numbers which are not in customer_machine(如您所述)。

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

這應該這樣做:

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_machineserial_number不與customer_machine相同數量的匹配連接,每serial_no;所以你正在增加你的結果。

+0

感謝的人:)這肯定有助於:)解決我的問題。 – 2013-03-13 19:27:28

+0

很高興幫助你 – Lamak 2013-03-13 19:29:34

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 
+0

我認爲你想從連接條件中獲取'customer_machine.serial_no IS NULL'條件並將它添加到'WHERE',否則它將不會過濾結果 – Lamak 2013-03-13 18:48:16

+0

是的,你是對。固定。謝謝。 – 2013-03-13 18:53:06

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)