我想在不使用UNION的情况下改进此SQL查询。当table_xx.uniqeId = 1时我想使用table_yy,当我想要使用table_ww时。事实上我想要这种动态。我想为uniqeId-table匹配使用另一个表,因为将来我可以为table_xx.uniqeId = 3添加额外的表,使用table_qq或其他。你能提出一些想法,我能用什么?
感谢。
SELECT
xx.info,
yy.value
FROM
table_xx xx,
table_yy yy
WHERE
xx.uniqeId = 1
UNION ALL
SELECT
xx.info,
yy.value
FROM
table_xx xx,
table_ww yy
WHERE
xx.uniqeId = 2
答案 0 :(得分:0)
如果在{yy和ww中value
是强制性的,那么就可以这样做。但就像Gordon Linoff已经评论过的那样,像这样的查询并不是必须表现得更好。最有可能的是它不会,而且它的可读性也更高。我会选择工会。
SELECT
xx.info,
nvl(yy.value, ww.value) as value
FROM
table_xx xx
LEFT JOIN table_yy yy ON xx.uniqeId = 1
LEFT JOIN table_ww ww ON xx.uniqeId = 2
WHERE
nvl(yy.value, ww.value) IS NOT NULL
但我认为如果引入一个额外的xx_id也需要一个额外的表,那么这表明你的数据库结构不正确。
更好的想法是将“uniqueid”添加到'值'表也是如此,因此您可以轻松地在xx上加入正确的值。这样,您可以根据需要添加额外的ID和匹配值,而无需修改数据库以添加额外的值表。
SELECT
xx.info,
yy.value
FROM
table_xx xx
INNER JOIN table_yy yy ON yy.xx_uniqueid = xx.uniqueid