INNER / LEFT JOIN两个表并使用行

时间:2015-11-22 13:24:00

标签: mysql sql mysqli left-join inner-join

我有两个表都有一行名称"键入"。它看起来像这样:

事件:

--------------------------------
|  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

更新

哇..原来,查询根本没有问题。它没有返回任何行的原因是"类型" table在标签行中有一些非法字符:)

2 个答案:

答案 0 :(得分:0)

您错过s

上的一个types.id

<强> SqlFiddle Demo

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 |

答案 1 :(得分:0)

你错过了type.id。它应该是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而不是使用类型,因为它有助于节省磁盘空间,而且id会自动增量,因此人为错误的可能性更小。