在MySQL中,使用GROUPBY和必须从两个表中选择信息会出现问题
找到至少一个申请人拥有的或至少一个职位需要的所有技能的名称。不要多次列出相同的名称在MySQL中,使用GROUPBY和必须从两个表中选择信息会出现问题,mysql,sql,having,Mysql,Sql,Having,找到至少一个申请人拥有的或至少一个职位需要的所有技能的名称。不要多次列出相同的名称 CREATE TABLE SPOSSESSED( anumber DECIMAL(6) NOT NULL, /*applicant*/ sname VARCHAR(30) NOT NULL, /*skill name*/ slevel DECIMAL(2) NOT NULL); CREATE TABLE SNEEDED( pnumber DECIMAL(
CREATE TABLE SPOSSESSED(
anumber DECIMAL(6) NOT NULL, /*applicant*/
sname VARCHAR(30) NOT NULL, /*skill name*/
slevel DECIMAL(2) NOT NULL);
CREATE TABLE SNEEDED(
pnumber DECIMAL(8) NOT NULL, /*position*/
sname VARCHAR(30) NOT NULL, /*skill name*/
slevel DECIMAL(2) NOT NULL);
如果每一张桌子都是一张一张的话,我想
SELECT sname FROM SPOSSESSED GROUP BY sname HAVING COUNT(anumber) >= 1;
SELECT sname FROM SNEEDED GROUP BY sname HAVING COUNT (pnumber) >= 1;
我面临的问题是在不加入/联合的情况下将这两者结合起来。我尝试过一种方法:
SELECT SPOSSESSED.sname FROM SPOSSESSED, SNEEDED
WHERE SPOSSESSED.sname = SNEEDED.sname
GROUP BY SPOSSESSED.sname
HAVING COUNT (pnumber) >= 1
OR COUNT (anumber) >= 1;
但是,结果并不等于单个SELECT语句。您的问题没有意义。更糟糕的是,它似乎推动了用逗号来表示加入——这是一种非常过时的做法,让我想起了鼓励女性吸烟或在汽油中添加铅 以下是一种在MySQL中实现所需功能的方法:
create temporary table t as
SELECT sname FROM SPOSSESSED GROUP BY sname HAVING COUNT(anumber) >= 1;
insert into t (sname)
SELECT sname FROM SNEEDED GROUP BY sname HAVING COUNT(pnumber) >= 1;
select distinct sname
from t;
我应该注意到,有条件是不相关的。您所指的数字从不为空。我留下它是因为它是您原始查询的一部分
回答这个问题最合理的方法可能是既不使用显式连接也不使用联合。但是,它确实假设有一个技能表:
select s.*
from skills s
where exists (select 1 from spossessed p where p.sname = s.sname) or
exists (select 1 from sneeded n where n.sname = s.sname);
你的问题没有道理。首先,这只是一种进行连接的老式方式,您永远不应该使用它。其次,您需要一个联接、并集或等效的构造来将多个表中的数据组合在一起。这就是SQL的工作原理;它执行ANSI-92之前的隐式联接,这通常被认为是错误的语法。真的,在这里做你想做的事情的唯一方法就是做一个join或者union。对,我想唯一的方法是合并这两个SELECT语句。谢谢