0

我试图完成的是我想从 tableA 中选择一行,从 tableB 中选择一行并组合结果(列名不同)。

tableA的布局是这样的:

+----------------------------+--------------+------+-----+---------------------+----------------+
| Field                      | Type         | Null | Key | Default             | Extra          |
+----------------------------+--------------+------+-----+---------------------+----------------+
| user_id                    | int(11)      | NO   | PRI | NULL                | auto_increment |
| nickname                   | varchar(32)  | NO   |     | NULL                |                |
| password                   | varchar(129) | NO   |     | NULL                |                |
| mafia_id                   | int(11)      | NO   |     | 0                   |                |
+----------------------------+--------------+------+-----+---------------------+----------------+

和表B这个:

+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| mafia_id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| mafia_name  | varchar(32) | NO   |     |         |                |
| mafia_tag   | varchar(5)  | NO   |     |         |                |
| mafia_color | int(11)     | NO   |     | 0       |                |
| mafia_car   | int(11)     | NO   |     | 0       |                |
| mafia_base  | int(11)     | NO   |     | 0       |                |
+-------------+-------------+------+-----+---------+----------------+

我试过这样的查询:

SELECT *
FROM users

WHERE users.nickname = 'Gamer_Z'

UNION

SELECT * FROM mafia
WHERE mafia.mafia_id = (
    SELECT users.mafia_id
    FROM users
    WHERE users.nickname = 'Gamer_Z'
);

和这个:

SELECT *
FROM users
WHERE nickname = 'Gamer_Z'
INNER JOIN mafia ON mafia.mafia_id = users.mafia_id;

但是这些查询给出了错误,我尝试了其他几个,但这些看起来,好,好吗?

我也读了这些问题:

如何在 MySQL 中连接两个具有不同行数的表?

在 MySQL 中合并多个查询结果(按列)

但我似乎无法解决我的问题。

我想要的输出格式是这样的:

|users.user_id|users.nickname|users.password|users.mafia_id|mafia.mafia_name|mafia.mafia_tag|mafia.mafia_color|mafia.mafia_car|mafia.mafia_base|

如何为我尝试在 MySQL(5) 中完成的任务构建正确的查询?提前致谢!

\编辑::


我差点忘了一件事!如果 mafia_id 在 tableB 中不存在,那么仍然必须返回 tableA 行。(所以用户不是黑手党,我只是加载默认用户数据)

4

2 回答 2

2

您必须将WHERE条件放在 之后JOIN,而不是之前:

SELECT    *
FROM      users a
LEFT JOIN mafia b ON a.mafia_id = b.mafia_id
WHERE     a.nickname = 'Gamer_Z'
于 2012-08-04T19:02:20.283 回答
0

加入是错误的

应该

SELECT * FROM users a JOIN mafia b ON a.mafia_id = b.mafia_id and a.nickname = 'Gamer_Z'

于 2012-08-04T19:04:28.067 回答