我想在一个表上进行搜索,该表返回一个值,用于搜索不同的表。
我有这个代码,它在俱乐部表中寻找团队代码:
output[i] = output[i]-255;
现在我想在匹配表上使用生成的Teamcode进行选择。
我有这个代码搜索匹配表并查找具有给定团队代码的所有匹配但我需要它来从上面的第一个搜索中获取代码。
SELECT Team, Teamcode
FROM epl.club
WHERE Teamcode =
(SELECT Teamcode
FROM epl.club
WHERE Team='Manchester City');
我不明白的另一件事是,我想让它仅在Select *
from epl.matches
where HomeTeam = 35
or AwayTeam = 35
and FTR like "A"
or FTR like "H";
或HomeTeam=35'= and '=FTR is A or FTR is H
时返回该行,但代码的作用是返回所有行即使它们包含35但在FTR列中只包含H或A.
答案 0 :(得分:1)
您必须在布尔表达式中使用括号:
SELECT *
FROM epl.matches
WHERE (HomeTeam = 35 or AwayTeam = 35)
AND (FTR like "A" or FTR like "H")
这是因为AND
has a higher operator precedence as OR
。
您可以将查询与联接组合起来:
SELECT Team, Teamcode FROM epl.club c
INNER JOIN epl.matches m ON (m.HomeTeam = c.Teamcode or m.AwayTeam = c.Teamcode)
WHERE (c.Team = 'Manchester City')
AND (m.FTR like "A" or m.FTR like "H")
其他信息:
这是一个非常简单的解释,如何理解'INNER JOIN' - 只要你不知道这一点。如果你有两个表:
{ Table: Club }----------------| { Table: Matches }----------|
| | | |
| Teamcode | Team | | HomeTeam | AwayTeam | FTR |
|----------+-------------------| |----------+----------+-----|
| 35 | Manchester City | | 38 | 39 | A |
| 38 | Arsenal London | | 38 | 35 | A |
| 39 | Leeds United | | 35 | 39 | H |
|----------+-------------------| | 38 | 35 | A |
| 39 | 38 | H |
|----------+----------+-----|
表INNER JOIN
和club
之间的matches
表示两个表的所有行组合中的m.HomeTeam = c.Teamcode or m.AwayTeam = c.Teamcode
,如果连接条件club.Team
,则只有行包含在结果中满足了。如果您将'Manchester City'
限制为{ Table: Join Result }------|
| |
| HomeTeam | AwayTeam | FTR |
|----------+----------+-----|
| 38 | 35 | A |
| 35 | 39 | H |
| 38 | 35 | A |
|----------+----------+-----|
,则您将获得以下加入结果:
FROM
需要一些时间来习惯连接语法的声明式样式,但它可以帮助您构建查询(与多个SELECT
表和嵌套的INNER JOIN
子查询相对)。此外,在大多数情况下,SQL查询优化器可以处理${VAR NAME}
更好的嵌套子查询。
答案 1 :(得分:0)
第一个查询可能只是:
SELECT
Team,
Teamcode
FROM epl.club
WHERE Team='Manchester City';
为什么当您可以直接访问Team字段时,同一个表上的子查询?
然后你可以这样做:
SELECT *
FROM epl.matches
WHERE HomeTeam = (SELECT Teamcode FROM epl.club WHERE Team='Manchester City')
OR AwayTeam = (SELECT Teamcode FROM epl.club WHERE Team='Manchester City')
AND FTR like "A"
OR FTR like "H";