【发布时间】:2014-03-27 08:18:00
【问题描述】:
我有两个疑问:
SELECT
users.id,
users.gender,
users.status,
users.icon_id,
users.image_name,
coords.lat,
coords.lng,
users.mess_count
FROM
users
INNER JOIN
coords ON users.id = coords.user_id
然后我选择被屏蔽的用户:
SELECT
first_user,
second_user
FROM
blocks
WHERE
first_user = $1 OR second_user = $1
我需要从第一个表中选择所有具有坐标且未被阻止的用户,我还需要一些公共信息(性别等)。然后因为我需要两侧阻挡。我必须选择是用户阻止了他,还是他被该用户阻止了。所以 $1 是当前用户,我选择的是我在 block 表中的 id,如果是 - 我从第一个查询中排除另一个用户。
然后在我的编程语言中使用字符串操作,我转换我的字符串以排除我从第二个查询中获得的结果。
我可能可以用EXCEPT 做到这一点,但我不能这样做,因为我只选择了第二个查询的 2 列,我需要更多,最终结果:users.id, users.gender, users.status, users.icon_id, users.image_name, coords.lat, coords.lng, users.mess_count。
【问题讨论】:
-
$1 和 $2 是用户名还是用户 ID?
-
@frlan 是用户 ID。
-
您需要更多的业务逻辑细节。例如,第一个查询只为每条记录返回 一个 个用户的数据,但第二个查询有 两个 个用户每条记录。如果
users.id出现在query 2 的either 列中,是否要从query 1 中排除所有记录?请具体,最好显示示例输入和输出数据。 -
@MatBailie 我刚刚更新了我的问题。需要您的评论,可以理解吗?
标签: sql postgresql except