Sql 2 表 Q? [复制]
Posted
技术标签:
【中文标题】Sql 2 表 Q? [复制]【英文标题】:Sql 2 Tables Q? [duplicate] 【发布时间】:2017-02-01 15:55:57 【问题描述】:我有 2 张桌子 工作 ID、描述、名称 测试 身份证,工作 我已经创建了查询:
SELECT jobs.id,jobs.name,jobs.country,jobs.description,test.id,test.jobid
FROM jobs,test
WHERE jobs.userid='10'
AND
GROUP BY jobs.id
它与我的所有工作相呼应,但测试 ID 全部为 1
如果我做到where jobs.id=test.jobid
,结果是已知的。
如何打印test.jobid
等于job.id
的所有作业以及没有test.jobid
的作业
【问题讨论】:
你正在做一个笛卡尔连接:你对你的 ttwo 表应该如何连接没有任何限制,所以 mysql 将jobs
中的每条记录与test
中的每条记录连接起来。这意味着您将获得n x m
结果。
【参考方案1】:
你所拥有的是一个交叉连接。这不是你想要的。你想要一个左连接。
像这样
SELECT jobs.id,jobs.name,jobs.country,jobs.description,test.id,test.jobid
FROM jobs
left join test on jobs.id = test.jobid
WHERE jobs.userid='10'
GROUP BY jobs.id
【讨论】:
您最好在 GROUP BY 语句中添加更多内容... @kbball -- 这是 mysql -- 它让你变得懒惰。 感谢只编辑jobs.id=test.jobid【参考方案2】:听起来您正在寻找的是左连接命令。
SELECT jobs.id AS jobs_id,jobs.name,jobs.country,jobs.description,test.id AS test_id,test.jobid AS job_id_from_test
FROM jobs
LEFT JOIN test ON test.jobid = jobs.id
WHERE jobs.userid='10'
-可能会有所帮助。上面的代码添加了左连接命令并去掉了不必要的'AND'和'GROUP BY'语句。与普通 JOIN 不同,LEFT JOIN 将返回作业表的所有适用值,即使测试表中没有相应的行。
【讨论】:
以上是关于Sql 2 表 Q? [复制]的主要内容,如果未能解决你的问题,请参考以下文章