【问题标题】:Select from one table based on results of select from another table根据从另一表中选择的结果从一个表中选择
【发布时间】:2016-12-04 17:45:20
【问题描述】:

我正在尝试根据从另一个表中选择的结果从一个表中返回行,但我并不精通 SQL/Oracle,并且正在努力将两者联系在一起。

ITEMS                 DEFS
item_id (1000)        trans (1125)
item_state (Y)        desp (680)
trans (1125)
orig_trans (1100)

总的来说,我正在尝试查询 defs.desp 编号,并返回 items.item_id、item.item_state 和 items.orig_trans,但我不知道我需要联接还是子查询(或者我是否需要'我试图实现甚至是可能的!)

我想要的是这样的:

SELECT I.ITEM_ID, I.ITEM_STATE, I.ORIG_TRANS
FROM ITEMS I
JOIN DEFS DF
ON I.TRANS = (*FIND 'TRANS' FROM DEFS TABLE USING THE DESP NUMBER BELOW*)
WHERE DF.DESP = 680

最终期望的输出是:

ITEM_ID    ITEM_STATE    ORIG_TRANS
1000       Y             1100

返回的顺序是什么让我很困惑,因为我的最终输出需要来自 ITEMS 表,但我需要找出的第一件事是 DEFS 表中的 TRANS 编号?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    这不是你需要的吗?

    SELECT I.ITEM_ID, I.ITEM_STATE, I.ORIG_TRANS
    FROM ITEMS I
    JOIN DEFS DF
    ON I.TRANS = DF.TRANS
    WHERE DF.DESP = 680
    

    【讨论】:

      【解决方案2】:

      试试:

      SELECT I.ITEM_ID, I.ITEM_STATE, I.ORIG_TRANS
      FROM ITEMS I
      JOIN (
      SELECT TRANS FROM DEFS WHERE DESP = 680
      ) DF
      ON I.TRANS = DF.TRANS
      

      【讨论】:

        【解决方案3】:

        你可以试试下面的SQL

        SELECT ITEM_ID, ITEM_STATE, ORIG_TRANS FROM ITEMS WHERE TRANS IN ( SELECT TRANS FROM DEFS WHERE DESP = 680 );

        【讨论】:

          猜你喜欢
          • 2015-02-15
          • 2021-01-06
          • 1970-01-01
          • 2012-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多