我正在为我支持的应用程序之一编写查询,并且正在寻找尝试在连接中获取DB2版本的OR语句时花费少的代价。既然你不能在DB2 INNER JOIN OR语句
Select *
FROM
TABLE A INNER JOIN TABLE B
ON
A.USERNAME = B.NAME
OR
A.USERNAME = B.USERNAME
使用“或”内我一直在寻找努力UNION或UNION ALL,但我担心的是,搭配起来可能需要更长的时间来恢复。
我正在为我支持的应用程序之一编写查询,并且正在寻找尝试在连接中获取DB2版本的OR语句时花费少的代价。既然你不能在DB2 INNER JOIN OR语句
Select *
FROM
TABLE A INNER JOIN TABLE B
ON
A.USERNAME = B.NAME
OR
A.USERNAME = B.USERNAME
使用“或”内我一直在寻找努力UNION或UNION ALL,但我担心的是,搭配起来可能需要更长的时间来恢复。
虽然我和其他人一起确认OR
可以很容易地使用连接条件,就像在其他任何条件(因此您的查询完全正常),在这种情况下,您仍然可以不使用OR
。
像column = value1 OR column = value2
这样的条件,其中相同的列对多个不同的固定值进行测试,可以转换为column IN (value1, value2)
。后者的工作不应该比前者更糟糕,最终可以看起来更清楚。
所以:
SELECT *
FROM
TABLE A
INNER JOIN
TABLE B
ON
A.USERNAME IN (B.NAME, B.USERNAME)
这是一个不错的选择。 – 2012-01-07 21:52:51
我再次尝试过,是的,你可以使用“OR”语句。当我以前尝试过时,它不断收到错误信息,而且DBA说他不认为你可以使用我们正在运行的DB2版本。感谢您的帮助。答案标记为例外。 – em3ricasforsale 2012-01-08 03:49:02
您可以恢复为使用WHERE子句语法进行连接。如果DB2优化器是聪明(我怀疑它是),它应该同样表现不如JOIN:
SELECT * FROM TABLE1 A, TABLE2 B
WHERE A.USERNAME = B.NAME OR A.USERNAME=B.USERNAME
我看到你在这里遇到的问题是,你没有在这里定义Join,并可能允许优化器根据无效条件来链接表。 – em3ricasforsale 2012-01-07 16:30:38
没有必要这样做。 'JOIN'条件允许'OR' ** **。 – 2012-01-07 16:37:38
SELECT GROUP_REDUCTION.TOUR, FROM_DATE, TO_DATE, DISCOUNT, GROUP_SIZE, REDUCTION
FROM SEASON_DISCOUNT
RIGHT JOIN GROUP_REDUCTION ON SEASON_DISCOUNT.TOUR = GROUP_REDUCTION.TOUR
ORDER BY GROUP_REDUCTION.TOUR, FROM_DATE;
这与这个问题有什么关系? – Ben 2014-11-04 16:35:17
有什么问题你的理由?你可以在JOIN条件下使用'or'。 – 2012-01-07 16:23:11