我有这个代码
SELECT tb1.id, tb1.start, tb1.end, tb1.name,
tb1.code, ROUND (Try_cast(tb2.Value as float),0) AS variable1
FROM tb1
LEFT OUTER JOIN tb2 ON tb1.id = tb2.ID
AND tb2.Descript LIKE '%Something%'
WHERE (tb1.star >= 0)
ORDER BY...
而且效果非常好。我从表 1 中选择值并从表 2 中添加变量 1。 但现在我需要从表2中添加另一个变量。我尝试复制它(意味着2x ROUND... as... + 2x LEFT OUTER JOIN,它只取变量1的值。然后我发现了Union,它执行,但它不会为variable2添加另一列,代码如下
。SELECT tb1.id, tb1.start, tb1.end, tb1.name,
tb1.code, ROUND (Try_cast(tb2.Value as float),0) AS variable1
FROM tb1
LEFT OUTER JOIN tb2 ON tb1.id = tb2.ID
AND tb2.Descript LIKE '%Something%'
UNION ALL
SELECT tb1.id, tb1.start, tb1.end, tb1.name,
tb1.code, ROUND (Try_cast(tb2.Value as float),0) AS variable2
FROM tb1
LEFT OUTER JOIN tb2 ON tb1.id = tb2.ID
AND tb2.Descript LIKE '%Somethingelse%'
WHERE (tb1.star >= 0)
ORDER BY...
你能帮我一下吗?谢谢你
我根据您的两个 SQL 语句做出一些假设,但看起来您的架构是 EAV 架构,或者与 EAV 架构密切相关。因此,您可能需要在 FROM 子句中添加一个新的
LEFT OUTER JOIN
,以从 tb2
中获取与您要过滤的 Descript
相对应的值。
这看起来像:
SELECT tb1.id, tb1.start, tb1.end, tb1.name,
tb1.code, ROUND (Try_cast(tb2.Value as float),0) AS variable1
, ROUND (Try_cast(tb3.Value as float),0) as variable2
FROM tb1
LEFT OUTER JOIN tb2 ON tb1.id = tb2.ID
AND tb2.Descript LIKE '%Something%'
LEFT OUTER JOIN tb2 AS tb3 ON tb1.id = tb2.id
AND tb3.Descript LIKE '%Somethingelse%'
因为当我们第二次连接同一个表时,我们将连接同一个表两次 (
tb2
),所以我们给它一个别名 tb3
,这样两个版本都可以在 SELECT
子句中引用(以及查询中的其他位置)需要)。