2017-09-13 49 views
1

我想讓兩個不同的選擇產生一個表輸出。 第一招:兩個表的不同條件

select NAME 
    from PROVIDER_GROUP 
where ID=(select GROUP_ID 
      from CUSTOMER_GROUP 
      where CUSTOMER_ID=(select CUSTOMER_ID 
           from CUSTOMER 
           where PHONE = 'MyNumber123')); 

select PHONE 
    from CUSTOMER 
where PHONE = "MyNumber123" 

表:

┌─────────────────────┐  ┌─────────────────────┐  ┌─────────────────────┐ 
│ PROVIDER_GROUP │  │ CUSTOMER_GROUP │  │  Customer  │ 
├─────────────────────┤  ├─────────────────────┤  ├─────────────────────┤ 
│  NAME   │  │  GROUP_ID  │  │  CUSTOMER_ID  │ 
│  GROUP_ID  │  │  CUSTOMER_ID  │  │  PHONE  │ 
└─────────────────────┘  └─────────────────────┘  └─────────────────────┘ 

預計:

  ┌─────────────────────┬─────────────────────┐ 
      │  PHONE   │  NAME   │ 
      ├─────────────────────┼─────────────────────┤ 
      │ +12345678910  │ NameProviderGroup1 │ 
      │ +12345678910  │ NameProviderGroup2 │ 
      │ +12345678910  │ NameProviderGroup3 │ 
      └─────────────────────┴─────────────────────┘ 
+0

您不應該像這樣嵌套子查詢:而是使用連接。另外,對文字使用單引號不會加倍。 – APC

+0

您的「數據模型」不包含SUBSCRIBER,因此很難建議您如何加入兩個查詢。用戶是否與用戶有關? – APC

+0

@Crcencia,'PROVIDER_GROUP'在預期結果中表名的結尾是如何表示的?你選擇了「PHONE」還是「GROUP_ID」? – saitejalakkimsetty

回答

2

我想我明白你現在問什麼。讓我知道這是否有竅門。

SELECT C.PHONE 
    ,PG.NAME 
FROM PROVIDER_GROUP PG 
JOIN CUSTOMER_GROUP CG ON CG.GROUP_ID = PG.GROUP_ID 
JOIN CUSTOMER C ON C.CUSTOMER_ID = CG.CUSTOMER_ID 
WHERE C.PHONE = 'MyNumber123' 

您可能需要使用LEFT JOIN取決於你是否希望看到沒有附着在CUSTOMER_GROUP表中的顧客電話號碼供應商羣體。

軼事,但CUSTOMER_GROUP表是您的CUSTOMERPROVIDER_GROUP表之間的中間人。這兩個表之間的關係是many-to-many。聯結表CUSTOMER_GROUP定義了兩者之間的關係。

此外,你的表格圖非常好。

+0

UNION它打印在一個列的電話號碼下的組名稱,這就是讓我頭痛的問題 – Cravenica

+0

@Kimmyshor我很困惑你的預期結果是什麼。那是底桌嗎?如果是這樣,「PROVIDER_GROUP」列是否來自「PROVIDER_GROUP」的「NAME」? – justiceorjustus

+0

是的,抱歉,我忘了提及xD – Cravenica