MySQL Join 需要显示 LEFT 表中的所有记录

标签 mysql

我想知道是否有人可以帮忙。

请看下面:

SELECT id,name FROM words;

ID、姓名

1,仍然

2、闪闪发光

3、汽水

SELECT * from translation;

words_id、lang_id、翻译

1, 1, A仍然

1, 2, B仍然

2, 1, 闪闪发光

我需要如下结果:

id、名称、lang_id、翻译

1,静止,1,静止

2,闪闪发光,1,AS闪闪发光

3、泡沫、NULL、NULL

我尝试过的查询

SELECT id,name,lang_id,translation FROM words LEFT JOIN translation ON words_id=id AND lang_id=1;

http://sqlfiddle.com/#!9/f544b/3

非常感谢

最佳答案

您的条件lang_id=1将您的LEFT JOIN转变为INNER JOIN。原因是当条件不满足时(即translation表中没有条目),它不会显示它。如果您想显示左表中的所有内容,请删除条件 lang_id=1

SELECT id,name,lang_id,translation 
FROM words 
LEFT JOIN translation ON words_id=id

如果需要条件,可以放在子查询中。

SELECT id,name,lang_id,translation 
FROM words w
LEFT JOIN (
    SELECT * 
    FROM translation
    WHERE lang_id = 1
) t ON t.word_id = w.id

关于MySQL Join 需要显示 LEFT 表中的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177508/

相关文章:

php - 如何在查询插入中循环变量值

php - 在循环中执行的查询会导致脚本在第一次迭代后退出

php - 使用php和phpexcel将两个表中的mysql数据导出到excel

mysql - 如何使用带有连接的 SQL 查询获取所有条目

mysql - 具有多个键值对的 SQL 连接子节点

mysql - mysql中NULL和Empty有什么区别

php - 使用 Bootstrap 在注册表单中显示验证

php - 如何以使用不同模型的形式实现 kartik yii2 FileInput

mysql - 我应该在 Node.js (Express) 应用程序中的什么地方定义我的 MySQL 客户端?

mysql - 两个 Web 服务器之间的 phpMyAdmin 安装