/ / Cross-Multiplying Queries - sql

Krížové vynásobenie dopytov - sql

chcem získať sériové čísla, ktoré ešte nie sú zahrnuté v tabuľke Customer_Machine. ale rady sa násobia. to je môj kód.

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 )

akákoľvek pomoc prosím?

odpovede:

1 pre odpoveď č. 1

ak sa pripojíte Product a serial_number tabuľky, výsledky budú serial numbers which are in products but not in customer_machine, Vzhľadom na to, že vyššie uvedené odpovede riešia tento prípad, tento dotaz sa má vybrať serial numbers which are not in customer_machine (ako ste opísali) použitím a left join a ignorovať Product stôl.

Demo Sql-Server Fiddle

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 pre odpoveď č. 2

Toto by malo byť:

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)

To, čo robíte teraz, sa spája s customer_machine pre každého serial_no z serial_number ktoré sa nezhodujú s rovnakým číslom customer_machine; takže vynásobíte svoje výsledky.


0 pre odpoveď č. 3

Pravdepodobne chcete vylúčiť konkrétne sériové čísla, ktoré už existujú, skôr než sa zapojiť do nich. Môžete to urobiť vo vašej klauzule:

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 pre odpoveď č. 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