具有外部联接的复杂SQL查询

时间:2019-02-26 09:02:37

标签: php mysql sql

有两个表 一个

------------------------------
id  |  Name
------------------------------
1   |  Alpha
-----------------------------
2   |  Beta
-----------------------------
3   |  Gamma
-----------------------------
4   |  Delta
-----------------------------

和另一个具有表a外键的表b

b

-----------------------------
id  | a_id | Film
-----------------------------
 1  |   1  | Bladerunner
-----------------------------
 2  |   1  | Star Wars
-----------------------------
 3  |   3  | Superman
-----------------------------
 4  |   4  | Rollerball
-----------------------------

使用外部联接编写SQL查询,以从表“ a”中获取所有没有以“ S”开头的电影的名称。

查询结果应为:

Beta
--------
Delta

3 个答案:

答案 0 :(得分:3)

使用关联的子查询与not exists

error

   SELECT * 
FROM   tablea a 
       LEFT JOIN tableb b 
              ON a.id = b.a_id 
WHERE  NOT EXISTS (SELECT 1 
                   FROM   tableb b1 
                   WHERE  b.a_id = b1.a_id 
                          AND film LIKE 'S%') 

或者您可以使用以下查询来避免子查询

    SELECT NAME, 
       Sum(CASE 
             WHEN film LIKE 'S%' THEN 1 
             ELSE 0 
           END) 
FROM   t1 a 
       LEFT JOIN t2 b 
              ON a.id = b.a_id 
GROUP  BY NAME 
HAVING Sum(CASE 
             WHEN film LIKE 'S%' THEN 1 
             ELSE 0 
           END) = 0 

输出:

name
Delta
Beta

答案 1 :(得分:0)

SELECT a.NAME 
FROM   a 
       LEFT JOIN b 
              ON a.id = b.a_id 
WHERE  a.NAME NOT IN (SELECT a.NAME 
                      FROM   a 
                             LEFT JOIN b 
                                    ON a.id = b.a_id 
                      WHERE  b.film LIKE 's%') 
GROUP  BY a.NAME 

输出


测试版

Delta

根据他没有提到的OP问题,只是在问题中给出了输出部分...他希望表a的所有名称中电影名称不以表b中的字母S开头。以上查询以最标准的方式完全满足了OP的需求。

OP刚刚提到了问题中的联接,但他没有提到他想要那些id也不存在于表b中a_id的id名称,即输出部分beta。

答案 2 :(得分:-1)

使用子字符串并加入

  select a.name from t1 a left join 
 t2 b on a.id=b.a_id
 where a.id  not in ( select b.a_id  from t2 b
  where 
upper(substring(b.Film,1,1))   like '%S%' and b.a_id is not null
    )

输出

name
Delta
Beta

jwk.py

相关问题