当前位置: 首页 > 知识库问答 >
问题:

在MySQL中,使用GROUP BY和必须从两个表中选择信息的问题

景靖琪
2023-03-14

查找至少一个申请人拥有或至少一个职位所需的所有技能的名称。不要多次列出相同的名称。

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

共有1个答案

弘承运
2023-03-14

你的问题没有意义。更糟糕的是,它似乎在推动使用逗号来表示连接——这种做法太过时了,以至于让我想到鼓励女性吸烟或在汽油中添加铅。

以下是在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;

我应该注意到具有条件的是无关紧要的。您所引用的数字永远不是NULL。我把它留在里面是因为它是您原始查询的一部分。

回答这个问题最合理的方法可能是既不使用显式的<code>连接。但是,它确实假设了一个“技能”表:

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);

 类似资料:
  • 问题内容: 我用来检索数据。我可以使用语句获取数据 现在,我可以使用以下名称获取相册名称: 现在我要获取专辑名称和角色用户的行名为 我正在使用查询 现在,当persons.get(0)返回一个对象时,如何获取名字和专辑行 通过运行代码: 我得到这个: 如何映射并获取和? 问题答案: 现在如何在persons.get(0)返回对象时获取行名和相册名 SELECT子句中具有多个 select_expr

  • 问题内容: 我正在运行此查询 但这不是我想要的结果,它返回多行。 我的一张桌子看起来像这个名字: 另一个表看起来像这个名字: 我如何使其选择查询,以便可以从两个表中获取与之相关的所有值,并使它看起来像这样 所需的输出: 谢谢!(提前!) 问题答案: 为您提供所需的输出(但这并不灵活,因此,如果添加要输出的更多详细信息,将无法进行更改而不进行更改):-

  • 问题内容: 如何选择一个表中所有未出现在另一表中的行? 表格1: 表2: 表1中不在表2中的行的示例输出: 也许这样的事情应该工作: 问题答案: 如果您在另一条注释中提到有300列,并且想要对所有列进行比较(假设这些列的名称相同),则可以使用a 隐式联接两个表之间所有匹配的列名称,以便不必繁琐地手动输入所有加入条件:

  • 问题内容: 我有2个表:table_a和table_b。两者都包含一个名为“ open”的列。 我想编写一个查询,返回以下内容 我尝试以下查询: 这将为table_a.open的每个值返回具有table_b.open的每个值的表 我可以在这里误解别名的正确用法。有任何想法吗? 问题答案: 这不是您遇到的别名问题。您正在表上执行创建直角坐标结果集的操作。 这会乘以您的结果集,因此的每一行都直接与中的

  • 我有下面三张表,希望从中获得以下选择: 1。)从中选择所有项目,并在中按对给定用户进行分组 这意味着当用户登录时,他将看到属于他所属组的所有(且仅限于)项目 2.)对于每个,选择所有协作项目 这意味着当用户从上面的1中选择任何组()时,他将看到属于所选组()的所有项目 约束:每个用户必须是组成员。表用于提供用户的和 这是我尝试过的,但是没有用 这是桌子 谢谢你的意见!

  • 我能够同时获得mysql查询结果的值和行。 但我很难获得查询的单个输出。例如: 我需要显示结果。但我没有得到结果。 我尝试了以下几种方法: 但我没有成功地显示(获取)实际值。