我想弄清楚UNION
的正确语法是什么。我的架构如下所示:
Players (playerNum, playerName, team, position, birthYear)
Teams = (teamID, teamName, home, leagueName)
Games = (gameID, homeTeamNum, guestTeamNum, date)
我需要打印队伍对阵X队的所有teamIDs
,但不能打击Y队。
所以我的第一个想法是检查hometeamNum,然后检查guesteamNum,但我不确定回家做正确的语法。
SELECT DISTINCT hometeamNum
FROM games
WHERE
guestteamNum IN
(SELECT teamid FROM teams WHERE teamname = 'X') AND
guestteamNum NOT IN
(SELECT teamid FROM teams WHERE teamname = 'Y')
UNION DISTINCT
答案 0 :(得分:1)
如果你只需要主队,那就足够了:
SELECT DISTINCT hometeamnum
FROM games
WHERE guestteamnum NOT IN (SELECT teamid FROM teams WHERE teamname = 'Y')
如果你需要主队和客队:
选择所有不是'y'并且不再作为主队参加比赛的球队,并且没有作为客队参加'y'比赛,并作为客队参加'x'比赛或对抗' x'作为主队。
SELECT DISTINCT teamid
FROM teams
WHERE teamname != 'y' AND teamid NOT IN
(SELECT hometeamnum
FROM games INNER JOIN teams ON games.guestteamnum = teams.teamid
WHERE teamname = 'y'
UNION
SELECT guestteamnum
FROM games INNER JOIN teams ON games.hometeamnum = teams.teamid
WHERE teamname = 'y')
AND teamid IN
(SELECT guestteamnum
FROM games INNER JOIN teams on games.hometeamnum = teams.teamid
WHERE teamname = 'x'
UNION
SELECT hometeamnum
FROM games INNER JOIN teams on games.guestteamnum = teams.teamid
WHERE teamname = 'x');
希望这就是你所追求的。那里可能有一个更简洁的问题,但是我想到一个晚上为时已晚:)
答案 1 :(得分:0)
使用public Rigidbody projectile;
//GameObject prefab = Resources.Load ("sphere") as GameObject;
public float speed = 20;
/*// Use this for initialization
void Start () {
}*/
// Update is called once per frame
void Update () {
if (Input.GetButtonDown("Fire1"))
{
Rigidbody instantiatedProjectile = Instantiate(projectile,
projectile.position,
projectile.rotation)
as Rigidbody;
instantiatedProjectile.velocity = transform.TransformDirection(new Vector3(0, 0,speed));
}
}
可以查找不存在的行。也就是说,您希望与“X”对战的团队是存在的行,这些团队可以使用简单的连接和where子句**来定位。然后从那些行中你需要找到任何对队伍'Y'不存在的行。
NOT EXISTS
注释
SELECT DISTINCT
hometeamnum
FROM games
INNER JOIN teams AS guests ON games.guestTeamNum = guests.teamID
WHERE guests.teamname = 'X'
AND NOT EXISTS (
SELECT 1
FROM games AS games2
INNER JOIN teams AS guests2 ON games2.guestTeamNum = guests2.teamID
WHERE games.hometeamnum = games2.hometeamnum
AND guests2.teamname = 'Y'
)
/ EXISTS
实际上不需要返回任何数据,因此可以使用NOT EXISTS
或select 1
或select null
。我在这里使用select *
只是因为它可能更容易理解 - 但我个人更喜欢`select null',它强调存在子查询没有返回任何数据。
select 1
/ EXISTS
效率相当高,效果可能优于NOT EXISTS
**表示性能,如果不改变结果,请优先使用IN (...)
答案 2 :(得分:-1)
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;