且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何为此编写SQL?

更新时间:2023-02-03 17:28:19

您的左手联接不会生效,因为您在第二个查询中使用了where子句:

Your left join does not take affect because you use where clause in the second query:

删除where子句:

SELECT *, min(gd.position)  FROM

(SELECT * FROM "Deals" as d WHERE (d.active = true) AND (d.latitude BETWEEN 40 AND 41) AND (d.longitude BETWEEN -75 AND -70)) AS gd

LEFT JOIN

(SELECT du."DealId" FROM "DealsUsed" AS du) AS bd

ON gd.id = bd."DealId"
WHERE bd."DealId" IS NULL
GROUP BY gd."UserId";

使用 Group by 不建议选择* 。只需选择您需要的字段。

using Group by with Select * is not advisable. Just select the fields you need. Something like:

SELECT gd."UserId", min(gd.position)  FROM

(SELECT * FROM "Deals" as d WHERE (d.active = true) AND (d.latitude BETWEEN 40 AND 41) AND (d.longitude BETWEEN -75 AND -70)) AS gd

LEFT JOIN

(SELECT du."DealId" FROM "DealsUsed" AS du) AS bd

ON gd.id = bd."DealId"
WHERE bd."DealId" IS NULL
GROUP BY gd."UserId";

您可以在on后面使用where子句:

You can use where clause after on like:

SELECT gd."UserId",bd."CustomerId", min(gd.position)  FROM

(SELECT * FROM "Deals" as d WHERE (d.active = true) AND (d.latitude BETWEEN 40 AND 41) AND (d.longitude BETWEEN -75 AND -70)) AS gd

LEFT JOIN

(SELECT du."DealId" FROM "DealsUsed" AS du) AS bd

ON gd.id = bd."DealId"
WHERE bd."DealId" IS NULL and bd."CustomerId" = 1
GROUP BY gd."UserId";