0

次のような行があります。

Table: Orders
OrderNumber     City
------------------------
1001            Austin
1001            Dallas
1001            Houston
1001            Miami
1002            Austin
1003            Austin
1003            Dallas

City が Austinであり、その他の都市を含むすべてのOrderNumbersを抽出したいと思います。上記の例では、注文 1001 と 1003 は取得できますが、1002 は取得できません。

これを達成するための最良の方法は何ですか?

4

2 に答える 2

2

別の可能なアプローチは、2 つの CTE (Common Table Expressions) (すべての注文用に 1 つAustin、他のすべての注文用に 1 つ) を用意し、次のように結合することOrderNumberです。

WITH AustinOrders AS
(
    SELECT OrderNumber FROM Orders WHERE City = 'Austin'
), OtherOrders AS 
(
    SELECT OrderNumber FROM Orders WHERE City <> 'Austin'
)
SELECT
    DISTINCT ao.OrderNumber
FROM AustinOrders ao
INNER JOIN OtherOrders oo ON ao.OrderNumber = oo.OrderNumber

次の結果を生成します。

OrderNumber
-----------
   1001
   1003
于 2013-02-26T17:29:20.027 に答える
1

以下を使用できるはずです。

select *
from orders o1
where o1.city = 'Austin'
  and exists (select ordernumber
              from orders o2
              where o1.ordernumber = o2.ordernumber
              group by ordernumber
              having count(distinct city) >1)

デモで SQL Fiddle を参照してください

于 2013-02-26T17:24:11.260 に答える