2013-02-11 61 views
1

成员表:选择从哪里NOT EXISTS查询

CREATE TABLE `Consultant_Memberships` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(255) DEFAULT NULL, 
    `membership_url` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; 

Memberships_List表:

CREATE TABLE `Consultant_Memberships_List` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `consultant_id` int(11) DEFAULT NULL, 
    `membership_id` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

内成员表,有“社会”的名单,其成员可以成为一部分。在选择,这是加入到“Memberships_List”的形式:

  1. ID - 自动递增
  2. consultant_id - 谁的社团加入
  3. membership_id用户的唯一ID - 指会员表中的'id'。

我希望能够在下拉列表中显示只有用户尚未选择的成员身份。到目前为止,我已经有了:

$query = $db->query("SELECT `Consultant_Memberships.`id`, `Consultant_Memberships`.`title` `FROM `Consultant_Memberships 
WHERE NOT EXISTS (SELECT `Consultant_Memberships`.`id`, `Consultant_Memberships`.`title` 
WHERE `Consultant_Memberships`.`id` = $user_id)"); 

目前我得到这个错误,并且也不能确定这是否是正确的查询:

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `Consultant_Memberships_List`.`id` =)' at line 1' in /Users/Sites/pages/medical.php:72 
Stack trace: 
#0 /Users/Sites/pages/medical.php(72): PDO->query('SELECT `Consult...') 
#1 /Users/Sites/index.php(18): include('/Users/Site...') 
#2 {main} 
    thrown in /Users/Sites/pages/medical.php on line 72 
+0

在'NOT EXISTS'子查询中缺少'FROM'。 – Bulat 2013-02-11 14:15:32

回答

0
SELECT `Consultant_Memberships.`id`, `Consultant_Memberships`.`title` `FROM `Consultant_Memberships 
WHERE NOT EXISTS (SELECT `Consultant_Memberships`.`id`, `Consultant_Memberships`.`title` 
WHERE `Consultant_Memberships`.`id` = $user_id) 

你有一个错误的语法试着这么做这不是我写的执行查询,而是在sql小提琴中检查,那是wrond

SELECT Consultant_Memberships.id, Consultant_Memberships.title FROM Consultant_Memberships 
WHERE NOT EXISTS (SELECT Consultant_Memberships.id, Consultant_Memberships.title from Consultant_Memberships 
WHERE Consultant_Memberships.id = 1) 
0

总是从高亮显示的左侧红色部分。哪里在你的情况下

SELECT `Consultant_Memberships.`id`, `Consultant_Memberships`.`title` 
`FROM <--- extra backtick 
`Consultant_Memberships <--- unclosed backtick 

顺便说一句,不要过度使用反引号。大部分的领域要求他们不要

...你有你的查询完全搞砸,因为它似乎
据我理解你的问题,它必须

SELECT cm.id, title 
FROM Consultant_Memberships cm LEFT JOIN Consultant_Memberships_List 
ON cm.id=membership_id WHERE membership_id IS NULL 

请注意,您的问题与PDO无关。
这是很明显的SQL查询问题。

+0

我已将它添加到一个SQL小提琴,以便更容易理解,我不知道错误在哪里不幸:http://sqlfiddle.com/#!2/3c25e/4 – Ben 2013-02-11 13:05:07

1

请试试这个:

SELECT a.id, a.title 
FROM Consultant_Memberships a, Consultant_Memberships_List b 
WHERE a.id <> b.consultant_id 

您收到语法错误,因为如果你看到你的子查询,你会发现,你是不是在指定的任何表中的原因。

WHERE NOT EXISTS (SELECT `Consultant_Memberships`.`id`, `Consultant_Memberships`.`title` 
WHERE `Consultant_Memberships`.`id` = $user_id) 

如果您需要更多的帮助,请告诉我们......

问候...... Mr.777

+0

嗨@ Mr.777,The上面显示的查询不幸地将Consultant_Memberships中的主键与Consultant_Memberships_List中的consultant_id相匹配。我调整了查询​​,但不幸的是我仍然收到一个错误:http://sqlfiddle.com/#!2/3c25e/11 – Ben 2013-02-11 13:17:51

+0

运行此查询没有“”请.....我刚刚完成了这一点,它成功运行没有任何错误.... – dosdebug 2013-02-11 15:14:43

1

FROM中缺少NOT EXISTS子查询。