admin

替代UNION子句

sql

我正在尝试自学,并更好地理解UNION的替代方法,并发现何时可以使用联接。

当我在玩这个游戏时,如果没有UNION,我似乎无法获得想要的东西。是否可以在单个查询中编写此代码?

SELECT DISTINCT a.id
  FROM table1 a, table2 b
 WHERE a.id = b.id
       AND a.ind IS NULL
       AND b.year >= '2017'
       AND b.code IN ('01','02','03')
       AND b.flag NOT IN ('F','L')
UNION
SELECT DISTINCT a.id
  FROM table1 a, table3 c
 WHERE a.id = c.id
       AND a.ind IS NULL
       AND c.area = 'MAIN'
       AND SYSDATE >= c.start

在此先感谢您的指导或帮助。


阅读 354

收藏
2021-06-07

共1个答案

admin

SELECT DISTINCT a.id
FROM table1 a
LEFT JOIN table2 b on b.id = a.id AND b.year >= '2017'
     AND b.code IN ('01', '02', '03') AND b.flag NOT IN ('F', 'L') 
LEFT JOIN table3 c ON a.id = c.id and c.area = 'MAIN' and SYSDATE >= c.start
WHERE a.ind IS NULL
    AND ( b.id IS NOT NULL or c.id IS NOT NULL)

这是旧的过时A,B连接语法真正表明它的年龄的事情之一,当您有一些条件必须在特定ON子句中使用而其他条件必须在该WHERE子句中使用时。以这种方式编写此查询将非常困难,以后更难以阅读和理解。更好地
总是 写出完整的INNER JOINLEFT JOIN等等。

2021-06-07