MYSQL 选择与联合中的别名相同的列名不起作用

标签 mysql sql

我有一个联合两个表的简单 MYSQL 查询:

SELECT * FROM (
    SELECT col1 AS col1A FROM table1
    UNION 
    SELECT col1 AS col1B FROM table2
) AS t WHERE col1A <> col1B

我在两个表中都有一个名为 col1 的列,我需要只选择与该列具有不同值的行,因此我选择它们作为别名。当我运行这个查询时,我得到:

Unknown column 'col1B' in 'where clause'

表1数据:

col1
----
test

表2数据:

col1
----
test

查询不应返回任何行,因为 table1 中 col1 中的每个值都等于 table2 中 col1 中的每个值,而不是它返回 table2 中的 col1 是未知的,尽管我选择它作为别名

最佳答案

我认为您需要查找UNION 的适当用法。它将返回第一个查询的所有结果以及第二个查询的所有结果。这会产生一个数据集,只有一个列(不是 col1 和 col2),在这种情况下只是 col1。

假设您要获取表 1 中不存在于表 2 中的所有记录,您可以使用 NOT EXISTS:

SELECT col1 
FROM table1 t1 
WHERE NOT EXISTS (
    SELECT 1
    FROM table2 t2
    WHERE t1.col1 = t2.col1
    )

关于MYSQL 选择与联合中的别名相同的列名不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006407/

相关文章:

mysql - 如何避免 MySQL 中的竞争条件

php - 如何清理一个3000万条记录的表

mysql - MongoDB 适合处理 SQL 类型的数据吗?

mysql - 按姓氏和名字排序

sql - 使用 JOINS 比较 SQLite 中的后续行

mysql - 如何使用 WHERE 语句和 COUNT(*) = 1 选择行

mysql - 如何在同一日期减去同一列中的两行?

如果设置了另一个字段中的值,MYSQL 会隐藏字段数据

PHP 和 Javascript

mysql - 获取每周数据