在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语句。谢谢