sql >> Databáze >  >> RDS >> Sqlserver

Jak se připojit k první řadě

SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )

V SQL Server 2005 a novějších stačí nahradit INNER JOIN pomocí CROSS APPLY :

SELECT  Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM    Orders
CROSS APPLY
        (
        SELECT  TOP 1 LineItems.Quantity, LineItems.Description
        FROM    LineItems
        WHERE   LineItems.OrderID = Orders.OrderID
        ) LineItems2

Vezměte prosím na vědomí, že TOP 1 bez ORDER BY není deterministický:tento dotaz vám poskytne jednu řádkovou položku na objednávku, ale není definováno, která to bude.

Vícenásobné vyvolání dotazu vám může poskytnout různé řádkové položky pro stejnou objednávku, i když se podklad nezměnil.

Pokud chcete deterministické pořadí, měli byste přidat ORDER BY klauzule na nejvnitřnější dotaz.

Příklad sqlfiddle



  1. Předejte kontrolu na konkrétní řádek pomocí příkazu Goto Label v PLSQL

  2. Výstup skriptu SQL Developer zkrátí šířku sys_refcursor

  3. SQLite žádný takový sloupec

  4. Jak zprovoznit UTF-8 ve webových aplikacích Java?