MySQL SELECT 来自 1 个表的结果,但根据另一个表排除结果?
Posted
技术标签:
【中文标题】MySQL SELECT 来自 1 个表的结果,但根据另一个表排除结果?【英文标题】:MySQL SELECT results from 1 table, but exclude results depending on another table? 【发布时间】:2010-05-19 04:01:23 【问题描述】:如果我想从表 'messages' 中获取结果但排除具有字段 messages.message=messages_view.id AND messages.deleted=1 的 'messages_view' 中的值的行,我必须使用什么 SQL 查询AND messages_view.user=$somephp 变量
用更通俗的话来说,我有一个消息表,其中每个 message 都由一个“id”表示,还有一个 messages_view 表与一个“message”字段相连。我想获取 message 中特定“用户”未删除的行(来自 messages_view)。 'deleted'=1 当消息被删除时。
这是我当前的 SQL 查询,它只是从中获取值:
SELECT * FROM messages WHERE ((m_to=$user_id)
OR (m_to=0 AND (m_to_state='' OR m_to_state='$state')
AND (m_to_city='' OR m_to_city='$city')))
这是我的表格布局:
table: messages
----------------------------
id (INT) (auto increment)
m_from (INT) <-- Represents a user id (0 = site admin)
m_to (INT) <-- Represents a user id (0 = all users)
m_to_state (VARCHAR)
m_to_city (VARCHAR)
table: messages_view
----------------------------
message (INT) <-- Corresponds to messages.id above
user (INT) <-- Represents a user id
deleted (INT) <-- 1 = deleted
【问题讨论】:
【参考方案1】:我真的觉得就这么简单:
SELECT * FROM messages WHERE ((m_to=$user_id)
OR (m_to=0 AND (m_to_state='' OR m_to_state='$state')
AND (m_to_city='' OR m_to_city='$city')))
AND NOT EXISTS (
SELECT *
FROM messages_view
WHERE messages.message = messages_view.id
AND messages.deleted = 1
AND messages_view.user = $somephpvariable
)
【讨论】:
【参考方案2】:Select ...
From Messages M
Where M.deleted = 0
And Not Exists (
Select 1
From Messages_View MV1
Where MV1.message = messages_view.Id
And MV1.user = $somephpvariable
)
您的第一段和第二段关于您想要删除的标志的内容存在矛盾。
【讨论】:
以上是关于MySQL SELECT 来自 1 个表的结果,但根据另一个表排除结果?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Join 和 Union 组合来自 2 个表的结果 [关闭]