/ / Query a moltiplicazione incrociata - sql

Query a moltiplicazione incrociata - sql

Mi piace ottenere i numeri seriali che non sono ancora inclusi nella tabella Customer_Machine. ma invece, le file si moltiplicano in modo incrociato. questo è il mio codice

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 )

qualche aiuto per favore?

risposte:

1 per risposta № 1

se ti unisci Product e serial_number tabelle, i risultati saranno serial numbers which are in products but not in customer_machine. Poiché le risposte precedenti gestiscono tale caso, questa query deve essere selezionata serial numbers which are not in customer_machine (come hai descritto) usando a left join e ignorando Product tavolo.

Demo di fiddle 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 per risposta № 2

Questo dovrebbe fare:

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)

Quello che stai facendo ora, si unisce al customer_machine per ogni serial_no a partire dal serial_number questo non corrisponde allo stesso numero di customer_machine; quindi stai moltiplicando i tuoi risultati.


0 per risposta № 3

Probabilmente vuoi solo escludere i numeri seriali specifici che esistono già, piuttosto che unirli a loro. Puoi farlo nella tua clausola 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 per risposta № 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