SQL查询帮助使用UNION或嵌套查询

ham*_*zah 0 mysql sql union

我正在尝试执行一个查询,但它对我来说效果不佳.我有这些表:

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;
Run Code Online (Sandbox Code Playgroud)

我想要做的是表格"spelare"中匹配的"Spnr"列与表格"speltillfalle"中的Spnr列.我使用这个查询做到了:

SELECT Spnr FROM spelare UNION SELECT Spnr FROM speltillfalle;
Run Code Online (Sandbox Code Playgroud)

这给了我两个表中匹配的所有Spnr值.我想做的是同样的事情,并添加另一个条件.IT应返回相同的内容,但仅当表"speltillfalle"中的"resultat"列的值为相应匹配的Spnr的"Diskad"时才返回.

dno*_*eth 5

根据您的描述,您只需将其添加为WHERE条件:

SELECT Spnr FROM spelare 
UNION 
SELECT Spnr FROM speltillfalle
WHERE resultat = 'Diskad';
Run Code Online (Sandbox Code Playgroud)

或者您使用EXISTS:

SELECT Spnr FROM spelare AS s
WHERE EXISTS
 ( 
   SELECT * FROM speltillfalle AS sf
   WHERE s.Spnr = sf.Spnr
     AND resultat = 'Diskad'
 );
Run Code Online (Sandbox Code Playgroud)

或IN:

SELECT Spnr FROM spelare AS s
WHERE Spnr IN
 ( 
   SELECT Spnr FROM speltillfalle AS sf
   WHERE resultat = 'Diskad'
 );
Run Code Online (Sandbox Code Playgroud)

这两个INEXSISTS是不是更常见的解决方案UNION:-)