0

我有这个数据库设计:

**users_tbl**
id
username
name

**posts_tbl**
id
url
users_id *FK REFERENCE to users table*

**posts_contents_tbl**
id
posts_id *FK REFERENCE to posts table
title
description
date
views
click
isDeleted

我正在使用这个查询

SELECT a.name,a.username,c.*
FROM users_tbl a
LEFT JOIN posts_tbl b ON a.id = b.users_id
LEFT JOIN posts_contents_tbl c ON b.id = c.posts_id
ORDER BY c.id ASC

为什么我尝试运行这个查询它给了我 NULL 结果,示例输出是这样的 在此处输入图像描述

但是当我尝试删除它时,ORDER BY c.id ASC它会给我这个输出: 在此处输入图像描述

这不是我的预期结果。

我的预期结果是它将以升序显示posts_contents_tbl,同时它不会显示一些空值。我的数据库中的某些用户在 posts_tbl 中没有帖子数据,因此它们也不应该显示。

我该怎么做呢?您的帮助将不胜感激和奖励!

谢谢!

PS:我的数据库中已经有数千条记录。

4

3 回答 3

2

在这种情况下,您必须使用INNER JOIN而不是LEFT JOIN因为您只希望显示有帖子的用户。之所以有Null值是因为记录是基于 table 的users_tbl,而您提到其中一些没有 post。对?

试试这个:

SELECT  a.name, 
        a.username,
        c.*
FROM    users_tbl a 
            INNER JOIN posts_tbl b
                ON a.id = b.users_id
            INNER JOIN  posts_contents_tbl c
                ON b.id = c.posts_id
ORDER BY    c.`date` DESC
于 2012-08-07T04:51:55.317 回答
0

我认为这就是你要找的:

SELECT a.name,a.username,c.* 
FROM users_tbl a 
     INNER JOIN posts_tbl b 
         ON a.id = b.users_id
     LEFT JOIN posts_contents_tbl c 
        ON b.id = c.posts_id 
ORDER BY IFNULL(c.id, 0) ASC;
于 2012-08-07T04:50:29.203 回答
0

如果您确实需要该posts_tbl数据(如果不可用,则不应显示该数据)。posts_contents_tbl然后所有数据都需要一个RIGHT JOINand INNER JOIN

像这样的查询:-

SELECT a.name,a.username,c.*
FROM users_tbl a
INNER JOIN posts_tbl b ON a.id = b.users_id
RIGHT JOIN posts_contents_tbl c ON b.id = c.posts_id
ORDER BY c.id ASC;
于 2012-08-07T05:13:14.747 回答