查找至少一个申请人所拥有的所有技能的名称或至少一个职位需要 。不要多次列出相同的名称。
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;
我遇到的问题是将这两个结合在一起WITHOUT JOIN / UNION。我尝试过一种方法:
SELECT SPOSSESSED.sname FROM SPOSSESSED, SNEEDED
WHERE SPOSSESSED.sname = SNEEDED.sname
GROUP BY SPOSSESSED.sname
HAVING COUNT (pnumber) >= 1
OR COUNT (anumber) >= 1;
但是,结果不等于单个SELECT语句。
答案 0 :(得分:0)
你的问题没有意义。更糟糕的是,它似乎推动使用逗号来表达连接 - 这是一种过时的方式,它让我想到女性被鼓励吸烟或添加铅汽油。
以下是在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;
我应该注意having
条件无关紧要。您所指的数字绝不是NULL
。我把它留下了,因为它是原始查询的一部分。
回答此问题的最合理方式可能既不使用明确join
也不使用union
。它确实假设了"技能"然而,表:
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);