我有2个表作为event_master,事件作为
id subject location 1 Test Test
event_id event_master_id from_user_id to_user_id status 1 1 100 100 1 2 1 100 101 1
我编写以下代码来获取记录,
"SELECT * FROM event_master as em
INNER JOIN event as e
ON em.Id = e.event_master_id
WHERE em.Id = e.event_master_id AND (e.from_user_id = '100' OR e.to_user_id = 100) and e.status = 1"
它给了我2条记录,我需要的只有1条记录,而且from_user_id和to_user_id是相同的,如果没有则查找to_user_id
答案 0 :(得分:1)
如果您希望记录的往返地址相同,或者是to用户的记录,为什么不只是过滤给用户:
SELECT *
FROM
event_master as em
INNER JOIN event as e ON em.Id = e.event_master_id
WHERE
em.Id = e.event_master_id AND
e.to_user_id = 100 and
e.status = 1
答案 1 :(得分:0)
首先,em.Id = e.event_master_id
子句中的WHERE
是多余的,您已经在ON
子句中检查了它!
除此之外,这是正在发生的事情。
你说
event_master AS em INNER JOIN event AS e
ON em.id = e.event_master_id
这将为您提供以下表格:
em.id em.subject em.location e.event_id e.event_master_id e.from_user_id e.to_user_id e.status
1 Test Test 1 1 100 100 1
1 Test Test 1 1 100 101 1
因为event_master
的一行匹配event
的两行。
然后你在这个条件下从这个表中选择:
em.Id = e.event_master_id
AND
(e.from_user_id = '100'
OR
e.to_user_id = 100)
AND
e.status = 1
嗯,AND
的第一部分对于两行都是正确的,因为这是INNER JOIN
的条件。对于两行,第三部分也是如此,因为e.status
是1.第二部分是OR
部分,表示e.from_user_is = 100 OR blablabla
。由于e.from_user_is = 100
对于两行都是正确的,因此AND
谓词的这一部分也是正确的。
因此,对于两行,您都可以获得AND
谓词的所有三个部分。因此,SELECT
会向您返回两行。
现在你想要的东西对我来说并不是很清楚。如果您希望from_user_id
等于to_user_id
,则应将... AND e.from_user_id = e.from_user_id
放在WHERE
谓词中。
要分享你说的地方,如果没有,那么找{i}} 我真的没有。