我有一个篮球联赛表,一个af队表和一个球员表,像这样:
LEAGUES
ID | NAME |
------------------
1 | NBA |
2 | ABA |
TEAMS:
ID | NAME | LEAGUE_ID
------------------------------
20 | BULLS | 1
21 | KNICKS | 2
PLAYERS:
ID | TEAM_ID | FIRST_NAME | LAST_NAME |
---------------------------------------------
1 | 21 | John | Starks |
2 | 21 | Patrick | Ewing |
给定一个联盟ID,我想从该联盟的所有球队中检索所有球员的名字和他们的球队ID,所以我这样做:
SELECT t.id AS team_id, p.id AS player_id, p.first_name, p.last_name
FROM teams AS t
JOIN players AS p ON p.team_id = t.id
WHERE t.league_id = 1
[0] => stdClass Object
(
[team_id] => 21
[player_id] => 1
[first_name] => John
[last_name] => Starks
)
[1] => stdClass Object
(
[team_id] => 21
[player_id] => 2
[first_name] => Patrick
[last_name] => Ewing
)
+ around 500 more objects...
SELECT t.id AS team_id, p.id AS player_id, p.first_name, p.last_name
FROM teams AS t
JOIN players AS p ON p.team_id = t.id
WHERE t.league_id = 1
GROUP BY t.id
[0] => stdClass Object
(
[team_id] => 21
[player_id] => 2
[first_name] => Patrick
[last_name] => Ewing
)
[1] => stdClass Object
(
[team_id] => 22
[player_id] => 31
[first_name] => Shawn
[last_name] => Kemp
)
etc...
[0] => stdClass Object
(
[team_id] => 2
[player_id1] => 1
[first_name1] => John
[last_name1] => Starks
[player_id2] => 2
[first_name2] => Patrick
[last_name2] => Ewing
+10 more players from this team...
)
+25 more teams...
在SQL中不能这样做,因为不能以数据集的形式表示结果。您希望返回复杂对象。您可以做的是在代码中处理这个问题,并通过返回一个按team_id排序的数据集来帮助您自己。每当team_id发生变化时,就应该在代码中创建新的对象,并用新的球员列表填充它。
应该是这样的(语法可能不正确):
返回的结果集:
team_id|player_id|first|last
1|1|f1|l1
1|2|f2|l2
1|3|f3|l3
2|5|f5|l5
2|6|f6|l6
当它在代码中返回时
$lastTeamId=0;
$output=array();
foreach($results as $row){
if($lastTeamId != $row["team_id"]){
$lastTeamId = $row["team_id"];
$output[$lastTeamId] = array();
}
$newPlayer = null;
$newPlayer->id = $row["player_id"];
$newPlayer->first = $row["first"];
$newPlayer->last = $row["last"];
$output[$lastTeamId][] = $newPlayer;
}
我有两张桌子:订单 订单详情 产品介绍 我想在product_ID1和4的订单详细信息中找到所有记录(因此尝试查看一个订单何时包含这两种产品)。因此运行此代码-INNER JOIN创建一个结果表,该表仅包含包含产品1、4或1和4的订单。 然后我要计算所有“订单详细信息”。order\u ID重复-这些是包含1和4的所有订单(注意-普通数据库-给定订单包含的产品不超过1个)。 这是我的代码-不太管用
问题内容: 我有下表: 现在,我想为每个用户创建所有可能的语言对,这意味着我希望结果集为:对于用户1:(2,7),(7,8),(2,8) 对于用户2:(10,3) 为此,我已经完成了以下查询: 我得到的结果是针对用户1的:(2,7),(7,8),(2,8),(7,2),(8,7),(8,2) 对于用户2:(10,3),(3,10) (10,3)和(3,10)对我来说没有区别 如何删除重复的行? t
问题内容: 我有两张桌子。表A列出了员工姓名。表B是一个复杂的表,其中包含有关员工打来的电话的信息。 我的目标是制作一个包含“名称”和“ callCount”列的表。我的目标是“左加入”和“分组依据”,但是我一直想念没有打过电话的员工。我怎样才能只保留名称并在其中放置零? 也许我很亲密,有人可以指出我的错字吗?在此先感谢您的帮助,以下是SQL: 问题答案: 这是一个JOIN而非NULL问题:您的过
我正在使用spring data JPA,我想在我的存储库中编写一个SQL查询。 我有一个下面的SQL查询(注意左边的连接): 我想在我的机构存储库中执行它,如下所示: 我想要的内容:(在此查询中,id设置为1,用于表示目的) 我看过很多这样的问题和答案(比如这一个),但我还没能找到答案。 那么,我如何编写这个查询,以便得到我想要的东西呢? 我得到了一个例外: mysqlsyntaxerrorex
问题内容: 无论性能如何,我从下面的查询A和B中都能得到相同的结果吗?C和D呢? 问题答案: 对于联接,不,顺序无关紧要。该查询将返回相同的结果,只要你改变你的选择来。 对于(,或)连接,是的,顺序是有意义的-和( 更新 )事情要复杂得多。 首先,外部联接不是可交换的,因此与 外部联接也不是关联的,因此在您的示例中同时涉及(可交换性和关联性)两个属性: 等效于 : 但: 不等同于 : 另一个(希望
问题内容: 假设有一个与此问题类似的情况。我想得到以下结果: 我可以使用选定的答案作为解决方案: 我如何确保即使在该范围内没有任何结果,也将显示30-39的分数范围? 问题答案: 尝试以下查询(也在SQL Fiddle上): 编辑: 您可以通过将参数更改为轻松调整范围。可以使用以下构造来确保始终覆盖您的分数: 对于CTE。