我在PostgreSQL中有这个SQL语句:
SELECT "Name", "ID" FROM "NAME TABLE" WHERE "ID" IN
(SELECT "No" FROM "LIST TABLE");
在第二个选择语句4“ID”中,“NAME TABLE”中有3个“名称”。目前的结果就像这个故事:
+---------------+
|Name | ID |
|----------------|
|Jhon | 23 |
|Jaas | 25 |
|Alya | 26 |
+----------------+
我想在下面显示第四个ID,而不显示名称列中的值:
+---------------+
|Name | ID |
|----------------|
|Jhon | 23 |
|Jaas | 25 |
|Alya | 26 |
| | 28 |
+----------------+
答案 0 :(得分:1)
假设我猜对了你想要的东西......这叫做外连接。
首先,您需要了解具有in
的子查询实际上等同于以下内部联接:
SELECT "Name", "ID"
FROM "NAME TABLE" n
INNER JOIN "LIST TABLE" l
ON (n."ID" = l."No");
鉴于此,您可以转换连接类型以保留不匹配的行:
SELECT "Name", "ID"
FROM "NAME TABLE" n
RIGHT OUTER JOIN "LIST TABLE" l
ON (n."ID" = l."No");
这里,"右外连接"表示"对于每个右手行,如果没有与连接条件匹配的左手行,则保持右手行并保留空值代替左手行"。
人们使用左外连接比右外连接更多。它们实际上是相同的东西 - " x左外连接y"与" y右外连接x"相同除了列的显示是" x,y"而不是" y,x"。产生的行是相同的。