SQL 连接子查询
Posted
技术标签:
【中文标题】SQL 连接子查询【英文标题】:SQL join subquery 【发布时间】:2013-09-14 03:14:32 【问题描述】:我尝试为我的问题寻找答案,但未能找到真正有帮助的答案。 我已经写了一个 sql 代码,但似乎无法找到问题所在。 是否可以在“FROM”部分放置子查询?
SELECT S2.ITEM,
S1.SHOP_ORDER,
S1.OPERATION_NO,
S1.START_DATE,
S1.QTY_GOODS,
S1.QTY_ENTERED,
S1.QTY_MRB
FROM (SELECT SHOP_ORD_RPT.OPERATION_NO,
SHOP_ORD_RPT.SHOP_ORDER
FROM FLAME.SHOP_ORD_RPT
WHERE SHOP_ORD_RPT.OPERATION_NO = 110
OR SHOP_ORD_RPT.OPERATION_NO = 370) AS S1
JOIN (SELECT SHOP_ORD.SHOP_ORDER
FROM FLAME.SHOP_ORD
WHERE SHOP_ORD.ITEM = '3A2375'
OR SHOP_ORD.ITEM = '3A2703')AS S2
ON S1.SHOP_ORDER = S2.SHOP_ORDER;
我在运行脚本时收到的错误是:
SQL 命令未正确结束
如果有人能提供帮助,我将不胜感激。 非常感谢- 露丝
【问题讨论】:
删除AS S1
和AS S2
中的“AS”。 SQL Command not properly ended? 的可能重复项
我认为这是甲骨文。这是我最不喜欢的错误信息之一。您在某处有语法错误。在每个子查询中为 shop_order 列放置别名可能值得一试。否则,请重新开始并逐步执行,直到找到错误为止。
这里不需要子查询——只需在主查询本身中加入表即可。
@DanBracuk 为什么给这些列加上别名会有帮助?您没有查看可能的重复链接并发现它是同一个问题吗?
@MartinSmith,认为某事值得一试并不等于认为它会起作用。就您的链接而言,我在发布我的链接后第一次看到您的评论。我打字很慢。
【参考方案1】:
尝试在FROM
和JOIN
子查询之后删除AS
keywrod,如下所示
SELECT S2.ITEM, S1.SHOP_ORDER, S1.OPERATION_NO, S1.START_DATE,S1.QTY_GOODS, S1.QTY_ENTERED, S1.QTY_MRB
FROM (
SELECT SHOP_ORD_RPT.OPERATION_NO, SHOP_ORD_RPT.SHOP_ORDER
FROM FLAME.SHOP_ORD_RPT
WHERE SHOP_ORD_RPT.OPERATION_NO =110
OR SHOP_ORD_RPT.OPERATION_NO =370
) S1
JOIN (
SELECT SHOP_ORD.SHOP_ORDER
FROM FLAME.SHOP_ORD
WHERE SHOP_ORD.ITEM ='3A2375'
OR SHOP_ORD.ITEM ='3A2703'
) S2
ON S1.SHOP_ORDER = S2.SHOP_ORDER;
【讨论】:
【参考方案2】:可以在 from 子句中放置子查询。试试这个:
SELECT S2.ITEM,
S1.SHOP_ORDER,
S1.OPERATION_NO,
S1.START_DATE,
S1.QTY_GOODS,
S1.QTY_ENTERED,
S1.QTY_MRB
FROM (SELECT SHOP_ORD_RPT.OPERATION_NO,
SHOP_ORD_RPT.SHOP_ORDER
FROM FLAME.SHOP_ORD_RPT
WHERE SHOP_ORD_RPT.OPERATION_NO = 110
OR SHOP_ORD_RPT.OPERATION_NO = 370) S1,
(SELECT SHOP_ORD.SHOP_ORDER
FROM FLAME.SHOP_ORD
WHERE SHOP_ORD.ITEM = '3A2375'
OR SHOP_ORD.ITEM = '3A2703') S2
WHERE S1.SHOP_ORDER = S2.SHOP_ORDER;
【讨论】:
以上是关于SQL 连接子查询的主要内容,如果未能解决你的问题,请参考以下文章
SQL中,多表连接查询和不相关子查询从查询效率上来说,哪种查询的效果更好?为啥 ?
MySql子查询(wherefromexists)及连接查询(left joinright joininner joinunion join)