INNER/LEFT JOIN 两个表并用行扩展结果
INNER/LEFT JOIN two tables and extend result with row
我有两个 table,它们都有一个名为 "type" 的行。它看起来像这样:
事件:
--------------------------------
| id | title | type |
--------------------------------
| 1 | EventNo1 | travel |
| 2 | EventNo2 | info |
| 3 | EventNo3 | travel |
| 4 | EventNo4 | sport |
| 5 | EventNo5 | info |
--------------------------------
类型:
--------------------------------
| id | type | label |
--------------------------------
| 1 | travel | xxx #1 |
| 2 | info | xxx #2 |
| 3 | sport | xxx #3 |
--------------------------------
如果 "events.type" 匹配 "types.type" 我想用类型中的标签扩展我的查询结果,所以它看起来像这样:
合并:
-------------------------------------------
| id | title | type | label |
-------------------------------------------
| 1 | EventNo1 | travel | xxx #1 |
| 2 | EventNo2 | info | xxx #2 |
| 3 | EventNo3 | travel | xxx #1 |
| 4 | EventNo4 | sport | xxx #3 |
| 5 | EventNo5 | info | xxx #2 |
-------------------------------------------
我该如何做到这一点?我假设我必须使用 INNER/LEFT JOIN,但以下尝试不会给我任何行:
SELECT events.id, events.title, events.type, types.id, types.type, types.label
FROM events
INNER JOIN types
ON events.type = types.type
更新
哇..原来查询根本没有问题。它没有 return 任何行的原因是因为 "types" table 在标签行中有一些非法字符 :)
你在 types.id
错过了一个 s
SELECT events.id, events.title, events.type, types.id, types.type, types.label
FROM events
INNER JOIN types
ON events.type = types.type
输出
| id | title | type | id | type | label |
|----|----------|--------|----|--------|--------|
| 1 | EventNo1 | travel | 1 | travel | xxx #1 |
| 2 | EventNo2 | info | 2 | info | xxx #2 |
| 3 | EventNo3 | travel | 1 | travel | xxx #1 |
| 4 | EventNo4 | sport | 3 | sport | xxx #3 |
| 5 | EventNo5 | info | 2 | info | xxx #2 |
您错过了 type.id 的 (s)。它应该是 types.id。
此外,您需要删除 type.id 因为根据 ypur 输出不需要它。
SELECT events.id, events.title, events.type, types.type, types.label FROM events INNER JOIN types ON events.type = types.type
请更喜欢保存 id 而不是使用类型,因为它有助于 节省磁盘空间 space 而且 id 会自动递增,因此人为错误的可能性较小。
我有两个 table,它们都有一个名为 "type" 的行。它看起来像这样:
事件:
--------------------------------
| id | title | type |
--------------------------------
| 1 | EventNo1 | travel |
| 2 | EventNo2 | info |
| 3 | EventNo3 | travel |
| 4 | EventNo4 | sport |
| 5 | EventNo5 | info |
--------------------------------
类型:
--------------------------------
| id | type | label |
--------------------------------
| 1 | travel | xxx #1 |
| 2 | info | xxx #2 |
| 3 | sport | xxx #3 |
--------------------------------
如果 "events.type" 匹配 "types.type" 我想用类型中的标签扩展我的查询结果,所以它看起来像这样:
合并:
-------------------------------------------
| id | title | type | label |
-------------------------------------------
| 1 | EventNo1 | travel | xxx #1 |
| 2 | EventNo2 | info | xxx #2 |
| 3 | EventNo3 | travel | xxx #1 |
| 4 | EventNo4 | sport | xxx #3 |
| 5 | EventNo5 | info | xxx #2 |
-------------------------------------------
我该如何做到这一点?我假设我必须使用 INNER/LEFT JOIN,但以下尝试不会给我任何行:
SELECT events.id, events.title, events.type, types.id, types.type, types.label
FROM events
INNER JOIN types
ON events.type = types.type
更新
哇..原来查询根本没有问题。它没有 return 任何行的原因是因为 "types" table 在标签行中有一些非法字符 :)
你在 types.id
s
SELECT events.id, events.title, events.type, types.id, types.type, types.label
FROM events
INNER JOIN types
ON events.type = types.type
输出
| id | title | type | id | type | label |
|----|----------|--------|----|--------|--------|
| 1 | EventNo1 | travel | 1 | travel | xxx #1 |
| 2 | EventNo2 | info | 2 | info | xxx #2 |
| 3 | EventNo3 | travel | 1 | travel | xxx #1 |
| 4 | EventNo4 | sport | 3 | sport | xxx #3 |
| 5 | EventNo5 | info | 2 | info | xxx #2 |
您错过了 type.id 的 (s)。它应该是 types.id。 此外,您需要删除 type.id 因为根据 ypur 输出不需要它。
SELECT events.id, events.title, events.type, types.type, types.label FROM events INNER JOIN types ON events.type = types.type
请更喜欢保存 id 而不是使用类型,因为它有助于 节省磁盘空间 space 而且 id 会自动递增,因此人为错误的可能性较小。