两个表不同的条件

时间:2017-09-13 15:37:01

标签: sql oracle

我正在尝试从两个不同的选择中创建一个表输出。 第一个:

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"

TABLES:

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

预期:

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

1 个答案:

答案 0 :(得分: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定义了两者之间的关系。

另外,你的表格图非常好。