Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 关于选择查询,一个表多个结果_Sql_Select - Fatal编程技术网

Sql 关于选择查询,一个表多个结果

Sql 关于选择查询,一个表多个结果,sql,select,Sql,Select,在问我的问题之前,我搜索了一下: 我有两张桌子 表信息: no | name 1 | david 2 | kang no | staffno | skillno ------------------------ 1 | 1 | 1 2 | 2 | 1 3 | 2 | 2 4 | 2 | 3 表信息杀死: no | name 1 | david 2 |

在问我的问题之前,我搜索了一下:

我有两张桌子

信息

no    | name
1     | david
2     | kang
no   | staffno | skillno
------------------------
1    |    1    |    1
2    |    2    |    1
3    |    2    |    2
4    |    2    |    3
信息杀死

no    | name
1     | david
2     | kang
no   | staffno | skillno
------------------------
1    |    1    |    1
2    |    2    |    1
3    |    2    |    2
4    |    2    |    3
info\u skill
表中的
staffno
info
表中的
no
是外键

我想得到:

  • name
    包含“ka”
  • 拥有
    skillno
    1,2,3
  • 这是我的sql

    SELECT a.NAME
    FROM   (SELECT no,
                   NAME
            FROM   info
            WHERE  NAME LIKE '%ka%') AS a
           INNER JOIN info_skill AS b
                   ON a.no = b.staffno
           INNER JOIN info_skill AS c
                   ON a.no = c.staffno
           INNER JOIN info_skill AS d
                   ON a.no = d.staffno
    WHERE  b.skillno = '1'
           AND c.skillno = '2'
           AND d.skillno = '3' 
    
    我想知道的是这部分

           INNER JOIN info_skill AS b
                   ON a.no = b.staffno
           INNER JOIN info_skill AS c
                   ON a.no = c.staffno
           INNER JOIN info_skill AS d
                   ON a.no = d.staffno
    WHERE  b.skillno = '1'
           AND c.skillno = '2'
           AND d.skillno = '3' 
    
    还有别的办法吗

    select a.name 
    from info a
    inner join info_skill as b on a.no = b.staffno
    where b.skillno in (1,2,3)
    and name like '%ka%'
    group by a.name
    having count(distinct b.skillno) = 3
    
    试试这个:

    SELECT I.name
    FROM info I
        JOIN info_skill S
             ON I.no = S.staffno
    WHERE I.name LIKE'%ka%" AND
          S.skillno=1 OR
          S.skillno=2 OR
          S.skillno=3
    
    这意味着:

    • 在外键后面连接两个表
    • 然后使用
      像%ka%
    • 现在,您需要检查skillno是否等于1、2或3

    如果这不是您确切需要的,那么请通过解释您确切需要的内容使您的问题更清楚。

    谢谢您的回答。但语法所在的位置必须是“and”。我知道“是”或“……你试过了吗?
    having
    子句确保只取having all 3.yes。我试过了。但我在(1,2,3,4)和(1,2,3)中得到了相同的结果。1、2、3、4结果也可以……@noDisplayName:我知道代码的格式,并且我完全按照我喜欢的方式进行格式化。所以,请不要改变其他用户的代码,只有当你认为你的代码风格比你的好others@juergend-道歉并回滚