我无法在 MYSQL 中为 UNION 放置 WHERE 条件。现在使用下面的 SQL 行,我将获取表中的所有记录,而不是在 2 个日期之间过滤日期。
我的订单工作正常。我想在不创建视图的情况下执行此操作
SELECT *
FROM DCHDR AS H
LEFT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
UNION
SELECT *
FROM DCHDR AS H
RIGHT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
WHERE H.DC_date
BETWEEN '2013-03-02'
AND '2013-03-11'
ORDER BY `Product_Desc` ASC
LIMIT 510 , 30
Run Code Online (Sandbox Code Playgroud)
与 不同ORDER BY,WHERE联合中的子句仅影响联合的那部分(SELECT它所附加的单个查询),而不影响整个联合。
要么将您的联合放在子查询中并过滤结果:
SELECT *
FROM
(
SELECT *
FROM DCHDR AS H
LEFT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
UNION
SELECT *
FROM DCHDR AS H
RIGHT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
) H
WHERE H.DC_date BETWEEN '2013-03-02' AND '2013-03-11'
ORDER BY `Product_Desc` ASC
LIMIT 510, 30
Run Code Online (Sandbox Code Playgroud)
或者为每个部分复制您的条件:
SELECT *
FROM DCHDR AS H
LEFT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
WHERE H.DC_date BETWEEN '2013-03-02' AND '2013-03-11'
UNION
SELECT *
FROM DCHDR AS H
RIGHT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
WHERE H.DC_date BETWEEN '2013-03-02' AND '2013-03-11'
ORDER BY `Product_Desc` ASC
LIMIT 510 , 30
Run Code Online (Sandbox Code Playgroud)
看起来您正在尝试模拟完整连接。我可能会建议以下查询,而不是,它应该是多快(实际上你想要做什么,这是不过滤工会的第二部分):
SELECT *
FROM DCHDR AS H
LEFT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
WHERE H.DC_date BETWEEN '2013-03-02' AND '2013-03-11'
UNION ALL
SELECT *
FROM DCHDR AS H
RIGHT JOIN DCDTL AS T ON H.DC_No = T.DC_Nos
WHERE H.DC_No IS NULL
ORDER BY `Product_Desc` ASC
LIMIT 510 , 30
Run Code Online (Sandbox Code Playgroud)
请注意,如果您有重复的行,DCDTL因为您有意尝试用 过滤掉UNION,则可以将 更改UNION ALL为UNION,但我怀疑实际上并非如此。
| 归档时间: |
|
| 查看次数: |
8319 次 |
| 最近记录: |