帮助这个查询它显示重复记录,它不起作用?

时间:2011-09-23 21:40:14

标签: mysql

我正在尝试编写一个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'

3 个答案:

答案 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直接存储在消息表中。用户可以拥有许多消息,即。一种对多