在其他表中选择条件时获取数据

时间:2015-09-06 11:42:23

标签: mysql

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

3 个答案:

答案 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)

当您在查询的SELECTWHERE部分中使用表格的字段时,它必须位于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;
相关问题