【问题标题】:MySQL SubQuery - MySQL 3.23MySQL 子查询 - MySQL 3.23
【发布时间】:2012-07-04 04:37:41
【问题描述】:

我有 2 个表,emp_master 和 passport_details。

emp_master(emp_id,first_name,email_id,dob,doj,status.........)
passport_details(id, emp_id,passport_number,given_name,......).

我正在尝试从没有输入 passport_details 的 emp_master 中获取 emp_id 和 first_name。

我尝试了不同的子查询组合,使用 NOT IN,NOT EXISTS。

SELECT emp_id,first_name
FROM emp_master
WHERE emp_id NOT IN(SELECT emp_id FROM passport_details WHERE status=1);

我遇到错误

You have an error in your SQL syntax near 'SELECT emp_id FROM passport_details WHERE status=1)' at line 3

我使用的是 MySQL 3.23。

我的问题是

  1. MySQL 3.23 是否支持子查询?
  2. 从没有输入 passport_details 的 emp_master 中获取 emp_id 和 first_name 的最佳查询可能是什么。

【问题讨论】:

标签: mysql subquery


【解决方案1】:
select em.emp_id, em.first_name
from emp_master em left join passport_details pd
    on pd.emp_id = em.emp_id and pd.status = 1
where pd.emp_id is null

我没有要测试的 3.23 实例,但这应该可以。

【讨论】:

    【解决方案2】:

    快速的 Google 建议在 MySql 4.1 中引入了子查询。所以它们在 3.23 中不受支持。

    你的东西是这样的:

    SELECT emp_id,first_name
    FROM emp_master
    JOIN passport_details ON emp_id
    WHERE status = 1;
    

    【讨论】:

      【解决方案3】:

      1.) MySQL 4.1 中添加了子查询SubQuery in MySQL

      您可以像这样将查询重写为JOIN 语句。

      SELECT a.emp_id,
             a.first_name
      FROM emp_master a 
              LEFT JOIN passport_details b
                 on a.emp_id = b.emp_id
      WHERE a.`Status` = 1 AND
            b.emp_id IS NULL;
      

      【讨论】:

      • 内部连接不起作用。他想要 没有有对应的 passport_details 记录的 emp_master 记录。
      【解决方案4】:

      不,直到 4.1 才支持子查询:http://dev.mysql.com/doc/refman/4.1/en/mysql-nutshell.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 2018-05-01
        • 2010-11-27
        • 2014-10-13
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多