我正在尝试编写一个sql语句来检索所有带有user_id_user ='3'和status ='2'的消息,但我得到重复的记录我不知道为什么,我坚持使用
My tables are this
message
id_message title content date user_id_user status
-------------------------------------------------------------
user
id_user name
----------------
message_has_user
message_id_message user_id_user
----------------------------------
我的mysql查询,但我得到重复记录我不知道为什么,我正在阅读教程也任何帮助真的很感激
SELECT
message.title,
message.content,
message.date,
message.id_message,
message_has_usuario.user_id_user,
message.status,
user.name
FROM
message ,
message_has_usuario
INNER JOIN user ON message_has_usuario.user_id_user = '3'
WHERE
message.status = '2'
答案 0 :(得分:1)
您正在购买笛卡尔产品,因为您没有准确地加入所有表格。 您正在加入USER和MESSGAE_HAS_USERIO,但您没有在MESSAGE上进行任何加入
快速示例_我认为这些关系是正确的。
SELECT *
FROM Message M
INNER JOIN Message_Has_User MAU on M.MessageID = MAU.MessageID
INNER JOIN User U ON MAU.UserID = U.UserID AND U.UserID = M.User_Id_User
WHERE MAU.userID = '3'
AND M.Status = '2'
我既不认可也不会承认我使用了Select *。认真地说我甚至写了它。 /皮
答案 1 :(得分:0)
试试这个:
...
FROM message
JOIN message_has_usuario
on message_has_usuario.message_has_usuario = message.message_has_usuario
...
答案 2 :(得分:0)
select message.*
from message, user
where user.id = 3
and user.id = message.user_id_user
and message.status = 2
您没有正确使用INNER JOIN。这对你有用!!另外,message_has_user表有什么意义?在这种情况下,我看起来多余,因为您可以将user_id直接存储在消息表中。用户可以拥有许多消息,即。一种对多