首页 > 解决方案 > 比较行后显示同一列的两个值(使用内连接)

问题描述

当您执行内部联接以比较同一列但不同行的 2 个值时。如何包含同一列的两个比较值?没有错误“列指定多次”

在新表中,我想查看 a.var2 和 b.var2。

CREATE TABLE newtable AS
SELECT
    a.var1,
    a.var2,
    CASE WHEN a.var2 = b.var2 THEN 'yes' AS equal
FROM
    (
        SELECT * FROM table
        WHERE var3 = x
    ) a
INNER JOIN (
        SELECT * FROM table
        WHERE var3 = y
    ) b ON a.var1 = b.var1

标签: sqlpostgresql

解决方案


您需要两列的别名:

CREATE TABLE newtable AS
SELECT
  a.var1,
  a.var2 AS a_var2,
  b.var2 AS b_var2,
  a.var2 = b.var2 AS equal
FROM (SELECT * FROM table WHERE var3 = 'x') a
JOIN (SELECT * FROM table WHERE var3 = 'y') b ON a.var1 = b.var1;

PostgreSQL 有一个布尔类型。我在上面的查询中使用它,我通常建议这样做,而不是使用带有 'yes'/'no'、'YES'/'NO'、'Y'/'N' 或您碰巧决定的任何值的字符串为了。布尔数据类型在这里是合适的类型。但是,在这种特定情况下,我根本不会写它,因为信息是多余的。只要看看这两列,你就知道它们是否相等。


推荐阅读