sql - 别名派生表是两个选择的并集

标签 sql union

我无法正确地为派生表设置别名:

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.*在每个内部选择语句中 - 因为 ab两者都有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/

相关文章:

mysql - UNION All,Group BY 然后得到整体 COUNT

sql - SQL 字符串中的转义 & 字符

php - SQL 不使用的字符

sql studio express 2005丢失sa密码问题

mysql - 优化其他连接的 select 语句内的 union join

MySQL 在 SELECT 子查询中引用其他 SELECT

sql - 解析 XML 以构建动态查询

mysql - SQL/PHP - 查找特定项目总和的平均值

mysql - 如何将选择与随机和限制结合起来

Mysql UNION 与动态查询