/ / Multiplicação cruzada de consultas - sql

Consultas Multiplicadas Cruzadas - sql

Eu gosto de obter os números de série que ainda não estão incluídos na tabela Customer_Machine. mas, em vez disso, as linhas são multiplicadas de forma cruzada. esse é o meu código.

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 )

alguma ajuda por favor?

Respostas:

1 para resposta № 1

se você se juntar Product e serial_number tabelas, os resultados serão serial numbers which are in products but not in customer_machine. Como as respostas acima tratam desse caso, essa consulta é selecionar serial numbers which are not in customer_machine (como você descreveu) usando um left join e ignorando Product mesa.

Demonstração de violino do 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 para resposta № 2

Isso deve fazer:

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)

O que você está fazendo agora é unir-se ao customer_machine para cada serial_no a partir de serial_number que não combina com o mesmo número de customer_machine; então você está multiplicando seus resultados.


0 para resposta № 3

Você provavelmente só quer excluir os números de série específicos que já existem, em vez de incluí-los. Você pode fazer isso em sua cláusula 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 )

0 para a resposta № 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