我无法正确地为派生表设置别名:
SELECT * FROM
(SELECT a.*, b.*
FROM a INNER JOIN b ON a.B_id = b.B_id
WHERE a.flag IS NULL AND b.date < NOW()
UNION
SELECT a.*, b.*
FROM a INNER JOIN b ON a.B_id = b.B_id
INNER JOIN c ON a.C_id = c.C_id
WHERE a.flag IS NOT NULL AND c.date < NOW())
AS t1
ORDER BY RAND() LIMIT 1
我得到 B_id 的重复列名。有什么建议?
最佳答案
问题不在于 union
,是 select a.*, b.*
在每个内部选择语句中 - 因为 a
和 b
两者都有B_id
列,这意味着您有两个 B_id
结果中的列。
您可以通过将选择更改为以下内容来解决此问题:
select a.*, b.col_1, b.col_2 -- repeat for columns of b you need
一般来说,我会避免使用
select table1.*
在您从代码使用的查询中(而不仅仅是交互式查询)。如果有人向表中添加一列,各种查询可能会突然停止工作。
关于sql - 别名派生表是两个选择的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8311662/