mysql查询引用不同表中1列的2列
抱歉,若有人问我这个问题,但我无法将我找到的任何答案与我的情况联系起来 我已为此问题创建了临时表:mysql查询引用不同表中1列的2列,mysql,join,Mysql,Join,抱歉,若有人问我这个问题,但我无法将我找到的任何答案与我的情况联系起来 我已为此问题创建了临时表: describe temp; +-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | id
describe temp;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | 0 | |
| artist | varchar(255) | NO | | NULL | |
| title | varchar(255) | NO | | NULL | |
| id_genre | int(11) | NO | | NULL | |
| id_genre2 | int(11) | NO | | NULL | |
+-----------+--------------+------+-----+---------+-------+
另一个相关表格是流派列表
我想创建一个查询,该查询将导致这两个查询的组合
select temp.title,genre.name
from temp
join genre on genre.id = temp.id_genre;
+------------------------+--------------+
| title | genre1 |
+------------------------+--------------+
| Tight Capris - 1958-B | Rockabilly |
| Endless Sleep - 1958-5 | MyFavourites |
| Daisy Mae - 1966 | Rockabilly |
| Fire of love - 1966-58 | Rockabilly |
| Stormy - 1963 | Pop |
+------------------------+--------------+
5 rows in set (0.00 sec)
select temp.title,genre.name as genre2
from temp
join genre on genre.id = temp.id_genre2;
+------------------------+------------+
| title | genre2 |
+------------------------+------------+
| Tight Capris - 1958-B | Rockabilly |
| Endless Sleep - 1958-5 | Rockabilly |
| Daisy Mae - 1966 | Rockabilly |
| Fire of love - 1966-58 | Rockabilly |
| Stormy - 1963 | Pop |
+------------------------+------------+
5 rows in set (0.00 sec)
注意标题1中的类型差异:无休止的睡眠
我想创建一个如下所示的结果,只是将genre.id替换为genre的名称:
+------------------------+----------+-----------+
| title | id_genre | id_genre2 |
+------------------------+----------+-----------+
| Tight Capris - 1958-B | 163 | 163 |
| Endless Sleep - 1958-5 | 161 | 163 |
| Daisy Mae - 1966 | 163 | 163 |
| Fire of love - 1966-58 | 163 | 163 |
| Stormy - 1963 | 99 | 99 |
+------------------------+----------+-----------+
5 rows in set (0.00 sec)
谢谢您需要加入table
流派
两次,因为tabletemp
上有两列依赖于它
SELECT temp.title,
a.name GenreA,
b.Name GenreB
FROM temp
INNER JOIN genre a
ON a.id = temp.id_genre
INNER JOIN genre b
ON b.id = temp.id_genre2
╔════════════════════════╦══════════════╦════════════╗
║ TITLE ║ GENREA ║ GENREB ║
╠════════════════════════╬══════════════╬════════════╣
║ Tight Capris - 1958-B ║ Rockabilly ║ Rockabilly ║
║ Endless Sleep - 1958-5 ║ MyFavourites ║ Rockabilly ║
║ Daisy Mae - 1966 ║ Rockabilly ║ Rockabilly ║
║ Fire of love - 1966-58 ║ Rockabilly ║ Rockabilly ║
║ Stormy - 1963 ║ Pop ║ Pop ║
╚════════════════════════╩══════════════╩════════════╝
这就是你需要的
SELECT
title,
genre1.name as genre1,
genre2.name as genre2
FROM
temp
INNER JOIN genre as genre1
ON genre1.id = id_genre
INNER JOIN genre as genre2
ON genre2.id = id_genre2
我同意Stephan的观点,你需要加入两次类型表。 但使用左连接而不是内部连接可能是一个好主意:
SELECT temp.title,
a.name GenreA,
b.Name GenreB
FROM temp
LEFT OUTER JOIN genre a
ON a.id = temp.id_genre
LEFT OUTER JOIN genre b
ON b.id = temp.id_genre2
如果temp中的记录在某个id_流派列中为NULL,或者id与流派表中的某一行不匹配,这将有所帮助
增加:
关于“我如何用特定的流派进一步过滤它。例如,流派1=‘rockabilly’(不起作用)。” 同时,添加
HAVING genre1 = 'rockabilly'
谢谢它工作得很好。我想我有很多的学习要做,因为我不完全理解查询的语法。我如何用特定的类型进一步过滤它。例如,如果genre1='rockabilly'(这不起作用),您不应该使用
别名
,而应该使用原始列名,请参见此处,实际上,因为关键字是可选的。感谢大家的快速响应。还有,Stephan,我更熟悉你使用的语法,这有助于我更好地理解其他语法。我如何用特定的体裁进一步过滤这些语法。例如,genre1='rockabilly'(这不起作用)。Pete,我已经为您请求的过滤器添加了其他信息。如果我的回答有帮助,请投赞成票或接受。如果没有,请在下面评论,我将修改和改进我的答案。