我正在尝试执行一个查询,但它对我来说效果不佳。我得到了这些表格:
create table spelare(
Spnr char(13),
Snamn varchar (20),
primary key (Spnr)
)engine=innodb;
create table speltillfalle(
starttid varchar (15),
Tnamn varchar (20),
Spnr char (13),
resultat char (10),
primary key (starttid, Tnamn, Spnr),
foreign key (Tnamn) references tavling(Tnamn),
foreign key (Spnr) references spelare(Spnr)
)engine=innodb;
我想要做的就是比赛' Spnr'表中的列" spelare"使用表格中的Spnr列" speltillfalle"。我使用这个查询做到了:
SELECT Spnr FROM spelare UNION SELECT Spnr FROM speltillfalle;
这给了我两个表中匹配的所有Spnr值。我想做的是同样的事情,并添加另一个条件。 IT应返回相同的内容,但仅限于" resultat"表格中的列" speltillfalle"是' Diskad'对应匹配的Spnr。
答案 0 :(得分:5)
根据您的描述,您只需将其添加为WHERE条件:
SELECT Spnr FROM spelare
UNION
SELECT Spnr FROM speltillfalle
WHERE resultat = 'Diskad';
或者您使用EXISTS:
SELECT Spnr FROM spelare AS s
WHERE EXISTS
(
SELECT * FROM speltillfalle AS sf
WHERE s.Spnr = sf.Spnr
AND resultat = 'Diskad'
);
或IN:
SELECT Spnr FROM spelare AS s
WHERE Spnr IN
(
SELECT Spnr FROM speltillfalle AS sf
WHERE resultat = 'Diskad'
);
IN
和EXSISTS
都是比UNION
更常见的解决方案: - )
答案 1 :(得分:2)
像这样使用Exists
:
SELECT Spnr, Snamn
FROM spelare
WHERE EXISTS
(
SELECT 1
FROM speltillfalle
WHERE resultat = 'Diskad'
AND Spnr = spelare.Spnr
);
答案 2 :(得分:0)
我想你想要join
:
select sp.Spnr from spelare sp
join speltillfalle sf on sp.Spnr = sf.Spnr and sf.resultat = 'Diskad'
group by sp.Spnr
答案 3 :(得分:0)
如果我理解你的问题,那么答案可能是
“从spelare a,speltillfalle b中选择a.spnr,b.spnr,其中a.spnr = b.spnr和b.resultat ='Diskad'”
答案 4 :(得分:0)
SELECT s.Spnr
FROM spelare as s
INNER
JOIN speltillfalle as sf
on s.Spnr=sf.Spnr
where sf.Spnr = 'Diskad';
由于您已在这两个表上应用了一个连接,并且它返回了列Spnr的所有匹配记录,我们只需要再添加一个条件,如上所示,仅为那些记录值为' Diskad'
答案 5 :(得分:0)
当你在表格 speltillfalle spelare 中的“Spnr值”和“em> spelare 中的匹配'Spnr'列时>“你不需要UNION。 在我的书中,“匹配”意味着它们出现在两个表格中。
speltillfalle 上的Spnr列定义为
foreign key (Spnr) references spelare(Spnr)
因此,如果 speltillfalle.Spnr 不为null(可能是因为您没有添加任何NOT NULL约束), spelare 表中确实存在。 在这种情况下
SELECT DISTINCT Spnr FROM speltillfalle WHERE resultat = 'Diskad' AND Spnr IS NOT NULL
完成工作:由于外键约束,您从 speltillfalle 获得的Spnr值确实存在于 spelare 表中。