MYSQL:Where子句不明确

时间:2015-06-24 08:25:34

标签: mysql sql database

我正在报道基础,我遇到了一个错误。我正在运行以下查询:

SELECT * FROM monday, tuesday WHERE games_won=3 AND games_drawn=1

收到此错误:

Column 'games_won' in where clause is ambiguous.

我知道这与两个具有相同字段名称的表有关,所以查询不接受它,但我只是不确定正确的SQL来修复它。

感谢。

2 个答案:

答案 0 :(得分:3)

为查询提供正确的别名。为列提供特定表的别名

 SELECT * FROM monday mon, tuesday tue 
 where mon.games_won=3 AND tue.games_drawn=1

答案 1 :(得分:3)

正如您所提到的,您的查询失败了,因为MySQL不知道要使用哪个games_won列。

你可以明确地说出来:

SELECT * FROM monday, tuesday 
WHERE monday.games_won=3 AND monday.games_drawn=1 AND tuesday.games_won=3 AND tuesday.games_drawn=1

但我怀疑这不会给你想要的行为。这将执行两个表的连接,如果你有:

Monday                           Tuesday
|id |games_won|games_drawn|      |id |games_won|games_drawn|
|1  |3        |1          |      |3  |3        |1          |
|2  |3        |1          |      |4  |3        |1          |

这将给出:

Results
|id |games_won|games_drawn|id |games_won|games_drawn|
|1  |3        |1          |3  |3        |1          |
|1  |3        |1          |4  |3        |1          |
|2  |3        |1          |3  |3        |1          |
|2  |3        |1          |4  |3        |1          |

这是表的完全连接。

我假设您需要每个表中与WHERE匹配的行列表。在这种情况下,您可以使用UNION:

SELECT * FROM monday WHERE games_won=3 AND games_drawn=1
UNION
SELECT * FROM tuesday WHERE games_won=3 AND games_drawn=1

最后,每天都有一张桌子是不寻常的。您可以通过将日期存储在game_results表中来简化数据库:

game_results
    id
    games_won
    games_drawn
    day

这样可以更轻松地检查不同日期的结果。