在联接中,如何确保 Table B 中的每个组联接到 Table A 中的每一行
In a Join, How to Ensure Each Group In Table B Joins to Every Row in Table A
我的 SQL 方言是 MySQL。我正在两个表上创建视图。
我有如下所示的 TableA:
| date | value |
|------|-------|
| 1 | 100 |
| 2 | 150 |
我有如下所示的 TableB:
| date | group | name |
|------|-------|-------|
| 1 | d | alice |
| 1 | e | bob |
| 2 | d | clark |
| 2 | e | mick |
我想在 date
列上进行连接并将它们组合起来,这样 B 中的每个组都可以连接到 A 上。为了更清楚,输出数据应该如下所示喜欢:
| date | group | value | name |
|------|-------|-------|-------|
| 1 | d | 100 | alice |
| 1 | e | 100 | bob |
| 2 | d | 150 | clark |
| 2 | e | 150 | mick |
所以这是一个非常人为的例子,只是为了便于在 markdown 中阅读。但是关于我的实际问题的一些细节:
- 我有大量的组,那么多嵌套的派生表是不可行的,并且会大大减慢视图查询时间。
- 我需要生成两个表的某些函数的列(例如,某些输出如
value + name
,这对于本示例的类型显然是无意义的)
我试过使用:
SELECT value, name, group
FROM TableA
RIGHT OUTER JOIN TableB
ON TableA.date = TableB.date
本例中的输出只采用其中一组,并丢弃其余组。
这个的语法是什么?
根据您分享的数据样本,您似乎在寻找 INNER JOIN
而不是 RIGHT JOIN
。
SELECT value, name, group
FROM TableA
JOIN TableB
ON TableA.date = TableB.date
我的 SQL 方言是 MySQL。我正在两个表上创建视图。
我有如下所示的 TableA:
| date | value |
|------|-------|
| 1 | 100 |
| 2 | 150 |
我有如下所示的 TableB:
| date | group | name |
|------|-------|-------|
| 1 | d | alice |
| 1 | e | bob |
| 2 | d | clark |
| 2 | e | mick |
我想在 date
列上进行连接并将它们组合起来,这样 B 中的每个组都可以连接到 A 上。为了更清楚,输出数据应该如下所示喜欢:
| date | group | value | name |
|------|-------|-------|-------|
| 1 | d | 100 | alice |
| 1 | e | 100 | bob |
| 2 | d | 150 | clark |
| 2 | e | 150 | mick |
所以这是一个非常人为的例子,只是为了便于在 markdown 中阅读。但是关于我的实际问题的一些细节:
- 我有大量的组,那么多嵌套的派生表是不可行的,并且会大大减慢视图查询时间。
- 我需要生成两个表的某些函数的列(例如,某些输出如
value + name
,这对于本示例的类型显然是无意义的)
我试过使用:
SELECT value, name, group
FROM TableA
RIGHT OUTER JOIN TableB
ON TableA.date = TableB.date
本例中的输出只采用其中一组,并丢弃其余组。
这个的语法是什么?
根据您分享的数据样本,您似乎在寻找 INNER JOIN
而不是 RIGHT JOIN
。
SELECT value, name, group
FROM TableA
JOIN TableB
ON TableA.date = TableB.date