Mysql 内部联接未返回有效记录
我有两个表作为事件主控,事件作为Mysql 内部联接未返回有效记录,mysql,join,Mysql,Join,我有两个表作为事件主控,事件作为 事件管理器 事件 我编写以下代码来获取记录 "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.sta
"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如果您希望to和from的记录相同,或者to用户的记录相同,为什么不只筛选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
首先,如果
子句中的em.Id=e.event\u master\u Id
是多余的,您已经在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
因为事件的一行与事件的两行匹配
然后,您将在此条件下从该表中选择:
em.Id = e.event_master_id
AND
(e.from_user_id = '100'
OR
e.to_user_id = 100)
AND
e.status = 1
嗯,和
的第一部分对于这两行都是正确的,因为这是内部联接的条件。第三部分同样适用于两行,因为e.status
为1。第二部分是或
部分,表示e.from_user_is=100或blablabla
。由于e.from\u user\u is=100
对两行都为真,因此和
谓词的这一部分也为真
因此,两行的和谓词的所有三个部分都为true。因此,SELECT
会将这两行返回给您
现在我还不清楚你想要什么。如果您希望从用户id
到用户id
的等于,则应将。。。e.from_user_id=e.from_user_id
在WHERE
谓词中
说出你说的部分,如果没有,那么寻找To_user\u 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
em.Id = e.event_master_id
AND
(e.from_user_id = '100'
OR
e.to_user_id = 100)
AND
e.status = 1