简体   繁体   English

为什么我的查询没有返回任何结果?

[英]Why doesn't my query return any results?

Why does this sql query only show results if they only have a row in users_warnings? 为什么这个sql查询只显示结果,如果他们在users_warnings中只有一行?

SELECT 
 u.id, 
 uw.warning 
FROM 
 users u
 INNER JOIN users_warnings uw ON (
  u.id = uw.uID
 )
LIMIT 21

I wish to show all users, but also grab the column "warning" in users_warnings, if any. 我希望向所有用户显示,但也会在users_warnings中抓取“警告”列,如果有的话。

Because you're using an inner join , which requires a row to exist on the joined table. 因为您正在使用inner join联接,这需要在联接表上存在行。 Try the following: 请尝试以下方法:

SELECT 
 u.id, 
 uw.warning 
FROM 
 users u
 LEFT JOIN users_warnings uw ON (
  u.id = uw.uID
 )
LIMIT 21

An INNER JOIN only returns something if there is data in both tables. 如果两个表中都有数据,则INNER JOIN仅返回一些内容。
Try a LEFT JOIN instead: 尝试LEFT JOIN

SELECT u.id, uw.warning FROM users u
            LEFT JOIN users_warnings uw ON (u.id = uw.uID)
            LIMIT 21

Change your inner join for a left join, as so: 更改左连接的内部联接,如下所示:

SELECT u.id, uw.warning FROM users u
                LEFT JOIN users_warnings uw ON (u.id = uw.uID)
                LIMIT 21
SELECT  
    u.id,  
    IFNULL(uw.warning,'') warning
FROM  
   (SELECT id FROM users LIMIT 21) u 
   LEFT JOIN users_warnings uw
   ON u.id = uw.uID 
;
  • Should be a LEFT JOIN not INNER JOIN 应该是LEFT JOIN而不是INNER JOIN
  • Refactored the query to get first 21 users before attempting a JOIN (faster query) 在尝试JOIN之前重构查询以获得前21个用户(更快的查询)
  • Defaulted warning to blank string if user had no warning 如果用户没有警告,则向空字符串发出默认警告

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM