1

我有 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 的最佳查询可能是什么。
4

4 回答 4

5
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 实例,但这应该可以。

于 2012-07-04T04:42:15.543 回答
2

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

你的东西是这样的:

SELECT emp_id,first_name
FROM emp_master
JOIN passport_details ON emp_id
WHERE status = 1;
于 2012-07-04T04:44:37.547 回答
1

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;
于 2012-07-04T04:47:01.293 回答
0

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

于 2012-07-04T04:45:00.203 回答