Mysql 从一个表中获取有关所有行的信息,但在联接表中该行不是

Mysql 从一个表中获取有关所有行的信息,但在联接表中该行不是,mysql,sql,Mysql,Sql,如果表中的userItems不是与moduleItems连接的记录,那么如何获取它 SELECT `users`.*, `useritems`.*, `moduleitems`.*, `modulesubitems`.* FROM `users` LEFT JOIN `useritems` ON useritems.f_user_id = users.user_id LEFT JOIN `moduleitems` ON moduleitems.moduleItem_id = useritems.

如果表中的userItems不是与moduleItems连接的记录,那么如何获取它

SELECT `users`.*, `useritems`.*, `moduleitems`.*, `modulesubitems`.* FROM `users`
LEFT JOIN `useritems` ON useritems.f_user_id = users.user_id
LEFT JOIN `moduleitems` ON moduleitems.moduleItem_id = useritems.f_moduleItem_id
LEFT JOIN `modulesubitems` ON modulesubitems.modulesubitem_id = useritems.userItem_value
编辑:我的数据库结构

CREATE TABLE IF NOT EXISTS `moduleitems` (
`moduleItem_id` int(11) NOT NULL AUTO_INCREMENT,
`f_module_id` int(11) NOT NULL,
PRIMARY KEY (`moduleItem_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=63 ;





如果您试图查找不在联接表中的所有记录(使用左联接时),请在WHERE子句中添加要联接到该表中的字段为NULL的字段。如果没有匹配项,则联接表中的所有字段都将为空

例如,如果您试图在moduleitems表中查找不匹配的情况,则这将起作用:

SELECT `users`.*, `useritems`.*, `moduleitems`.*, `modulesubitems`.* 
FROM `users`
LEFT JOIN `useritems` ON useritems.f_user_id = users.user_id
LEFT JOIN `moduleitems` ON moduleitems.moduleItem_id = useritems.f_moduleItem_id
LEFT JOIN `modulesubitems` ON modulesubitems.modulesubitem_id = useritems.userItem_value
WHERE moduleitems.moduleItem_id IS NULL

如果希望查看每个用户的每个moduleitem,不管他们在useritems表中是否有匹配的记录,这应该可以:

SELECT  `users`.*, `useritems`.*, `moduleitems`.*, `modulesubitems`.* 

FROM    `users`

        CROSS JOIN `moduleitems`

        LEFT JOIN `useritems` 
        ON useritems.f_user_id = users.user_id
        AND moduleitems.moduleItem_id = useritems.f_moduleItem_id

        LEFT JOIN `modulesubitems` 
        ON modulesubitems.modulesubitem_id = useritems.userItem_value

如果表中的userItems不是与moduleItems连接的record,那么如何获取呢?很难理解。问题是什么?对不起,我听不懂……对不起,我的英语不好。如果您有10个moduleItems(子项现在不重要),并且在插入user之后添加了一个moduleItem,那么在userItems中只有9个userItems。我需要得到10个userItems,最后一个是空值的。当然,如果你在寻找moduleitems上不匹配的情况,你就不需要后续加入modulesubitems和
moduleitems
*,
modulesubitems
*。在moduleitems和modulesubitems中记录。它们不在表userItems中(插入新用户后添加新模块Item时)。您的查询返回空结果。我想我不明白您想做什么。如果要查看没有useritems的位置,请将where子句更改为useritems.f_user_id为NULL。但是,由于要从该表加入moduleitems,然后再加入modulesubitems,因此在这些表中不会得到任何匹配的记录。在这些表中没有任何更改。当记录没有WHERE时,它们也不会有WHERE。好的,我想我现在明白了。因此,对于每个用户,您希望显示所有模块项,而不管它们在useritems表中是否有匹配项?未知列“useritems.userItem\u value”在“on子句”中“不幸的是,否。未知列”在“on子句”中“users.user\u id”您让我看到了。您发布的查询中有users.user\u id,因此我不确定为什么它不起作用。如果您需要更多帮助,请发布您的表结构。好的,现在就试试。我在查询中添加了交叉连接。
CREATE TABLE IF NOT EXISTS `useritems` (
`f_user_id` int(11) NOT NULL,
`f_moduleItem_id` int(11) NOT NULL,
`userItem_value` varchar(255) DEFAULT NULL,
PRIMARY KEY (`f_user_id`,`f_moduleItem_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=35 ;
SELECT `users`.*, `useritems`.*, `moduleitems`.*, `modulesubitems`.* 
FROM `users`
LEFT JOIN `useritems` ON useritems.f_user_id = users.user_id
LEFT JOIN `moduleitems` ON moduleitems.moduleItem_id = useritems.f_moduleItem_id
LEFT JOIN `modulesubitems` ON modulesubitems.modulesubitem_id = useritems.userItem_value
WHERE moduleitems.moduleItem_id IS NULL
SELECT  `users`.*, `useritems`.*, `moduleitems`.*, `modulesubitems`.* 

FROM    `users`

        CROSS JOIN `moduleitems`

        LEFT JOIN `useritems` 
        ON useritems.f_user_id = users.user_id
        AND moduleitems.moduleItem_id = useritems.f_moduleItem_id

        LEFT JOIN `modulesubitems` 
        ON modulesubitems.modulesubitem_id = useritems.userItem_value