首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Join SQL Quest

Oracle Join SQL Quest
EN

Stack Overflow用户
提问于 2013-05-23 19:02:19
回答 3查看 153关注 0票数 3

我有3张桌子如下所示:

代码语言:javascript
复制
CREATE TABLE USER_STATUS ("UID" varchar2(7), "STAT_ID" varchar2(11)) ;
INSERT ALL 
    INTO USER_STATUS ("UID", "STAT_ID") VALUES ('UID_001', 'STAT_ID_001')
    INTO USER_STATUS ("UID", "STAT_ID") VALUES ('UID_001', NULL)
    INTO USER_STATUS ("UID", "STAT_ID") VALUES ('UID_001', NULL)
    INTO USER_STATUS ("UID", "STAT_ID") VALUES ('UID_002', 'STAT_ID_002')
    INTO USER_STATUS ("UID", "STAT_ID") VALUES ('UID_002', NULL)
    INTO USER_STATUS ("UID", "STAT_ID") VALUES ('UID_003', 'STAT_ID_003')
SELECT * FROM dual;


CREATE TABLE STATUS_LKUP ("LKUP_ID" varchar2(11), "STAT_CODE" varchar2(11), "STAT_ID" varchar2(11), "STATUS" varchar2(20));
INSERT ALL 
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_001', 'ST_CODE_001', 'STAT_ID_001', 'Processing')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_002', 'ST_CODE_002', 'STAT_ID_001', 'Processing')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_003', 'ST_CODE_003', 'STAT_ID_001', 'Processing')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_004', 'ST_CODE_004', 'STAT_ID_001', 'Processing')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_005', 'ST_CODE_011', 'STAT_ID_001', 'Issue')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_006', 'ST_CODE_012', 'STAT_ID_001', 'Issue')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_007', 'ST_CODE_013', 'STAT_ID_001', 'Issue')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_008', 'ST_CODE_014', 'STAT_ID_001', 'Issue')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_009', 'ST_CODE_015', 'STAT_ID_001', 'Issue')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_010', 'ST_CODE_021', 'STAT_ID_001', 'Done')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_011', 'ST_CODE_022', 'STAT_ID_001', 'Done')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_012', 'ST_CODE_031', 'STAT_ID_001', 'Started')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_013', 'ST_CODE_032', 'STAT_ID_001', 'Started')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_014', 'ST_CODE_002', 'STAT_ID_002', 'Processing (Sent)')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_015', 'ST_CODE_004', 'STAT_ID_002', 'Processing (Waiting)')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS")  VALUES ('LKUP_ID_016', 'ST_CODE_014', 'STAT_ID_002', 'Issue in Prod')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS") VALUES ('LKUP_ID_017', 'ST_CODE_012', 'STAT_ID_002', 'Issue in Prod')
    INTO STATUS_LKUP ("LKUP_ID", "STAT_CODE", "STAT_ID", "STATUS")  VALUES ('LKUP_ID_018', 'ST_CODE_021', 'STAT_ID_002', 'Done')
SELECT * FROM dual;


CREATE TABLE CORE ("CORE_ID" varchar2(11), "STAT_CODE" varchar2(11));

INSERT ALL 
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_001', 'ST_CODE_001')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_002', 'ST_CODE_012')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_003', 'ST_CODE_021')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_004', 'ST_CODE_012')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_005', 'ST_CODE_012')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_006', 'ST_CODE_021')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_007', 'ST_CODE_001')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_008', 'ST_CODE_003')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_009', 'ST_CODE_012')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_010', 'ST_CODE_021')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_011', 'ST_CODE_001')
    INTO CORE ("CORE_ID", "STAT_CODE") VALUES ('CORE_ID_013', 'ST_CODE_004')
SELECT * FROM dual;

检查这个-> Oracle SQL Fiddle

表是在Oracle DB中创建的。现在,根据用户通过的UID,我需要检索具有状态的内核,如下所示:

单击此处查看预期结果

到目前为止,我试图检索结果,但无法加入他们。

代码语言:javascript
复制
SELECT STLK.STAT_CODE, STLK.STATUS FROM STATUS_LKUP STLK WHERE STLK.STAT_ID IN (SELECT USRST.STAT_ID FROM USER_STATUS USRST WHERE USRST.UID = 'UID_001');

请帮帮忙。

FYI:这不是作业。实际的表是复杂的,这些表只是为了得到更好的解释而转换的。

提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-23 19:15:47

相当直截了当的连接;

代码语言:javascript
复制
SELECT sl."STATUS", sl."STAT_CODE", c."CORE_ID"
FROM USER_STATUS us
JOIN STATUS_LKUP sl
  ON us."STAT_ID" = sl."STAT_ID"
JOIN CORE c
  ON c."STAT_CODE" = sl."STAT_CODE"
WHERE "UID" = 'UID_001'
ORDER BY "STATUS", "LKUP_ID"

一个要测试的SQLfiddle

票数 1
EN

Stack Overflow用户

发布于 2013-05-23 19:14:30

试一试

代码语言:javascript
复制
SELECT l.STATUS, 
       l.STAT_CODE,
       c.CORE_ID
  FROM STATUS_LKUP l JOIN CORE c
    ON l.STAT_CODE = c.STAT_CODE JOIN USER_STATUS u
    ON l.STAT_ID = u.STAT_ID
 WHERE u."UID" = 'UID_002'
 ORDER BY l.STATUS DESC, l.STAT_CODE

SQLFiddle

票数 1
EN

Stack Overflow用户

发布于 2013-05-23 19:07:15

此版本的查询工作如下:

代码语言:javascript
复制
SELECT STLK.STAT_CODE, STLK.STATUS
FROM STATUS_LKUP STLK
WHERE STLK.STAT_ID IN (SELECT USRST.STAT_ID
                       FROM USER_STATUS USRST
                       WHERE USRST."UID" = 'UID_001'
                      );

UID是Oracle中的一个保留字(请参阅这里),这就是它需要双引号的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16721895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档