我有2个表,现在我想要在active_season中选择的季节输出所有匹配。当我尝试下面的查询时,我收到一个错误。有人能帮助我吗?
SELECT * FROM `matches`
Where season = active_season.season
错误:#1054 - 'where子句'中的未知列'active_seasons.season'
table matches
id date season team_a team_b
1 2015-08-23 2015-2016 yellow red
2 2015-04-18 2014-2015 green blue
3 2015-09-04 2015-2016 white brown
4 2014-02-11 2013-2014 pink yellow
5 2015-03-19 2014-2015 red brown
6 2015-11-30 2015-2016 blue pink
7 2015-05-06 2014-2015 green white
table active_season
id season
1 2015-2016
答案 0 :(得分:0)
是的,它应该像你做的那样出错。您需要做的是执行JOIN
操作,如
SELECT m.* FROM `matches` m
JOIN active_season ac ON m.season = ac.season;
(或)在active_season
子句中添加表FROM
,如
SELECT * FROM `matches`, active_season
Where season = active_season.season
答案 1 :(得分:0)
当您在查询的SELECT
或WHERE
部分中使用表格的字段时,它必须位于FROM
部分。将SELECT
视为资源交付部件,将WHERE
视为过滤部件,将FROM
视为资源保留区域,为前面提到的部件提供所需的资源。
现在,当您在FROM
部分中使用多个表时,MySQL会返回这些表的产品。例如如果您有两个包含给定行的表:
table1 (id, title)
------------------
id title
------------------
1 first
2 second
和
table2 (id, fk_id, description) // fk_id is foreign key from table1
-------------------------------------
id fk_id description
1 1 d1
2 2 d2
然后运行此查询
SELECT * FROM table1, table2
你得到这个结果:
id title id fk_id description
-----------------------------------------
1 first 1 1 d1
1 first 2 2 d2
2 second 1 1 d1
2 second 2 2 d2
table1
的每条记录对table2
的每条记录,即两张表的产品。要获得正确的结果,您需要指定table1的哪个记录与table2的哪个记录匹配。这可以使用WHERE
部分或JOIN
SELECT * FROM table1, table2 WHERE table1.id=table2.fk_id
-----------------------------------------
id title id fk_id description
-----------------------------------------
1 first 1 1 d1
2 second 2 2 d2
使用JOIN
SELECT * FROM table1 JOIN table2 ON table1.id=table2.fk_id
-----------------------------------------
id title id fk_id description
-----------------------------------------
1 first 1 1 d1
2 second 2 2 d2
同样,您可以使用INNER JOIN
SELECT
a.*
FROM
`matches` a
JOIN active_season b ON a.season = b.season
WHERE
b.season='2015-2016'
您可以在此处详细了解MySQL连接:https://dev.mysql.com/doc/refman/5.0/en/join.html
答案 2 :(得分:0)
SELECT mac.*
FROM `matches` mac
JOIN
active_season ac
ON mac.season = ac.season;