我有这个数据库设计:
**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:我的数据库中已有数千条记录。
答案 0 :(得分:2)
在这种情况下,您必须使用INNER JOIN
而不是LEFT JOIN
,因为您只希望用户显示帖子。 Null
值存在的原因是因为记录基于表users_tbl
,并且您已经提到其中一些记录没有帖子。正确?
试试这个:
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
答案 1 :(得分: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;
答案 2 :(得分:0)
如果您真的需要,posts_tbl
数据不会显示(如果不可用)。posts_contents_tbl
的所有数据都需要RIGHT JOIN
和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;