0

鉴于这些表:

+---------------+---------+
| Field         | Type    |
+---------------+---------+
| group_id      | int(10) |
| subscriber_id | int(10) |
+---------------+---------+

+---------------+--------------+
| Field         | Type         |
+---------------+--------------+
| subscriber_id | int(10)      |
| firstname     | varchar(50)  |
| lastname      | varchar(50)  |
| company       | varchar(120) |
| position      | varchar(50)  |
| email         | text         |
| lettertype    | varchar(5)   |
| status        | varchar(20)  |
+---------------+--------------+

我使用以下查询来获取订阅者的子集:

SELECT * 
FROM newsletter_subscribe AS a, newsletter_subscriber AS b
WHERE (a.group_id = 1 or a.group_id = 4)AND (a.subscriber_id = b.subscriber_id)

如果在 newsletter_subscribe 中存在 group_id = 3 的行,那么我想做的是从子集中排除,那么该行中的 newsletter_subscribe 将从结果中排除。

我的想法是制作一个临时表来替换a,但我不确定如何去做。

4

2 回答 2

1

就目前而言,您永远不会得到 group_id=3,因为您只允许组14where 子句的第一个术语。如果您想要除 3 之外的所有组,请使用

WHERE (a.group_id <> 3) AND (a.subscriber_id = b.subscriber_id)

也许

WHERE 3 NOT IN (a.group_id, b.group_id) AND (a.subscriber_id = b.subscriber_id)

从两个表中排除它。

于 2013-08-12T15:01:36.353 回答
1
SELECT * 
FROM newsletter_subscribe AS a, newsletter_subscriber AS b
WHERE (a.group_id = 1 or a.group_id = 4) AND (a.subscriber_id = b.subscriber_id) AND (b.subscriber_id NOT IN (SELECT subscriber_id FROM newsletter_subscribe WHERE group_id = 3))
于 2013-08-12T15:01:46.760 回答