我做這個查詢Null值SQL連接mysql中
SELECT m.chat_id, m.msg_sender_id, m.message, m.id,
DATE_FORMAT(m.created_at, '%Y-%m-%d %H:%i:%s') as created_at,
g.id as group_id, g.name as group_name, g.image as group_image
FROM message as m
INNER JOIN chat as c ON c.id = m.chat_id
LEFT OUTER JOIN group as g ON c.group_id = g.id
WHERE c.id = 434
ORDER BY m.id ASC
我想實現的是擺脫聊天的所有消息,如果有參與聊天返回基團。組被附加到聊天對象(而不是消息對象)。出於某種原因,我在所有行上獲得group
。
你能建議我該如何做到這一點?
============= EDIT ==============
group
表的結構是這樣的:
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) NOT NULL,
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`image` longtext COLLATE utf8_bin,
`status` int(11) DEFAULT NULL,
`creator_id` int(11) NOT NULL
chat
表結構看起來像這樣
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) NOT NULL,
`group_id` int(11) DEFAULT NULL,
`person1_id` int(11) NOT NULL,
`invitation_id` int(11) NOT NULL,
message
表看起來像這樣
`id` int(11) NOT NULL AUTO_INCREMENT,
`message` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`created_at` datetime(6) NOT NULL,
`chat_id` int(11) NOT NULL,
`msg_sender_id` int(11) NOT NULL,
這是從查詢
434 14 Some text 900 2017-09-10 09:48:56 3 My group 1 image.jpg
434 13 Some text 2 901 2017-09-10 09:48:59 3 My group 1 image.jpg
434 14 Some text 3 935 2017-09-16 15:37:07 3 My group 1 image.jpg
434 14 Some text 4 968 2017-09-21 06:52:56 3 My group 1 image.jpg
我不太瞭解這個問題。你的查詢看起來很好,但是你從'group_group'得到了比預期更多的結果?請添加一些示例數據。 – HoneyBadger
這裏沒有'group'。 – Strawberry
可能你在所有的三個表中都有id = 434,包括group,因此你得到的是所有行的groupName。 –