我正在尝试让我的SQL查询工作而且我失败了,所以我决定向更多有经验和熟悉SQL的人询问,因为我不是这样。
我拥有:我的数据库中有2个表,一个是“DEV”表,其中包含:id, lat, lon, login, password
第二个表是“TASK”表,其中包含:id, lat, lon, address, id_dev
。 Id_dev是表“DEV”的外键。
我要做的是:进行查询以获取所有没有分配任务的DEV(在给定dev.id的表“task”中没有记录)并获取另一个具有任务的DEV列表。
我希望他们分开。我尝试了一些教程:
SELECT * FROM `dev` INNER JOIN 'task' ON dev.id=task.id_dev ORDER BY dev.id;
但它对我不起作用。有什么建议吗? 亲切的问候!
答案 0 :(得分:6)
如果您希望“dev”记录没有“任务”,则不应使用INNER JOIN
,因为它会带回集合的交集。
一种选择是使用LEFT JOIN
,例如:
SELECT dev.*
FROM dev
LEFT JOIN task
ON dev.id=task.id_dev
WHERE task.id_dev IS NULL
ORDER BY dev.id;
答案 1 :(得分:0)
SELECT * FROM `dev` INNER JOIN 'task' ON dev.id=task.id_dev ORDER BY dev.id;
请勿在{{1}}上使用单引号'
。查询应如下所示:
task
答案 2 :(得分:0)
使用LEFT JOIN
代替INNER JOIN
。
试试这个:
SELECT d.*
FROM `dev` d
LEFT JOIN `task` t ON d.id = t.id_dev
WHERE t.id IS NULL
ORDER BY d.id;