mysql - SQL 多子查询

标签 mysql sql

<分区>

我目前正在尝试在两个子查询中查找所有具有相同 ID 的条目并显示第一个表。我在使用别名时遇到问题。

(SELECT *
 FROM personTable
 WHERE ID IN
     (     SELECT ID
           FROM workerTable
     ) 
 AND firstName LIKE 'O%');


 (SELECT *
  FROM ownsTable
  WHERE PhoneNumberID IN
      ( SELECT ID
        FROM phonenumberTable
        WHERE Home <>'' AND `Work` <>'' AND Cell <>''
      )
  );

我现在想根据第二个表的“PersonID”检查第一个表的“ID”,并返回第一个表中 ID 和 PersonID 匹配的行。

最佳答案

使用 Exists 来做到这一点

SELECT * 
FROM   persontable p 
WHERE  id IN (SELECT id 
              FROM   workertable) 
       AND firstname LIKE 'O%' 
       AND EXISTS (SELECT 1 
                   FROM   ownstable o 
                   WHERE  phonenumberid IN (SELECT id 
                                            FROM   phonenumbertable 
                                            WHERE  home <> '' 
                                                   AND ` work ` <> '' 
                                                   AND cell <> '') 
                          AND p.id = o.personid); 

此外,如果可能的话,将所有子查询中的IN转换为Exists可能效率不高

关于mysql - SQL 多子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33529556/

相关文章:

c# - 从类中运行 MySQL 查询。值(value)观没有正确传递到类(class)

使用 BETWEEN 的 MySQL DATE_FORMAT 不起作用

Mysql从不同的表中添加列

mysql - 如何使用 SQL 使用 WHERE 获取所有行

php - 在 PHP/MySQL 中使用 TIMESTAMP 字段获取时区

SQL 获取组子句的最高重复值

java - 我看不到添加到我的 ListView 的第一项

sql - 使用 select 将行添加到查询结果

sql - 何时使用公共(public)表表达式 (CTE)

mysql - SQL 过滤掉 if manytomany_id = x