Sql 交叉乘法查询

Sql 交叉乘法查询,sql,Sql,我想获得客户机器表中尚未包含的序列号。但相反,行是交叉相乘的。这是我的密码 SELECT serial_number.serial_no FROM product INNER JOIN serial_number ON product.productid = serial_number.productid INNER JOIN customer_machine ON NOT( customer_

我想获得客户机器表中尚未包含的序列号。但相反,行是交叉相乘的。这是我的密码

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 ) 
需要帮忙吗

这应该可以:

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)

您现在要做的是,对于与
客户机
中的相同编号不匹配的
序列号
,加入
客户机
;因此,您正在将结果相乘。

您可能只想排除已经存在的特定序列号,而不是将它们加入。您可以在where子句中执行此操作:

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
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 )

如果您加入
产品
序列号
表,结果将是
序列号,它们在产品中,但不在客户机器中
。由于上面的答案处理了这种情况,因此此查询是使用
左连接
并忽略
产品
表来选择不在客户机器中的
序列号(如您所述)


一些示例数据、所需的输出等…我认为您需要从连接条件中获取
客户机.serial\u no为NULL
条件,并将其添加到
的WHERE
,否则它根本不会过滤结果
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