搜索一个表并使用结果搜索另一个表

时间:2016-03-19 21:28:39

标签: mysql select

我想在一个表上进行搜索,该表返回一个值,用于搜索不同的表。

我有这个代码,它在俱乐部表中寻找团队代码:

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.

2 个答案:

答案 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 JOINclub之间的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";