/ / Consultas de multiplicación cruzada - sql

Consultas de multiplicación cruzada - sql

me gusta obtener los números de serie que aún no están incluidos en la tabla Customer_Machine. pero en cambio, las filas se multiplican cruzadas. este es mi 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 )

cualquier ayuda por favor?

Respuestas

1 para la respuesta № 1

si te unes Product y serial_number tablas, los resultados serán serial numbers which are in products but not in customer_machine. Como las respuestas anteriores manejan ese caso, esta consulta es para seleccionar serial numbers which are not in customer_machine (como usted ha descrito) usando un left join e ignorando Product mesa.

Sql-Server violín 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 para la respuesta № 2

Esto debería hacer:

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)

Lo que estás haciendo ahora, es unirte a la customer_machine para cada serial_no de serial_number que no coincide con el mismo número de customer_machine; entonces estás multiplicando tus resultados.


0 para la respuesta № 3

Probablemente solo desee excluir los números de serie específicos que ya existen, en lugar de unirlos. Puede hacerlo en su 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 la respuesta № 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