【发布时间】:2013-12-27 14:26:38
【问题描述】:
我有以下 SQL 查询:
SELECT EXISTS (SELECT r.id FROM Rules r INNER JOIN rule_t c on c.id=r.rule_t.id
INNER JOIN user u on u.id = r.user_id
WHERE u.fmnum='2813'
AND c.name='default') ::int
有没有办法可以修改它,以便我得到两个值,来自 EXISTS 方法的 INT 和 r.id?
我知道我可以更改查询以便删除 EXISTS 方法...如果子选择返回任何内容,那么我知道记录存在...但我只是想知道是否可以这样做以上。
谢谢。
编辑 1
我正在 pgadmin3 的新查询窗口中测试以下代码...
SELECT *
FROM (
SELECT TRUE, r.id
FROM rules r
JOIN rule_t c on c.id = r.rule_t.id
JOIN user u on u.id = r.user_id
WHERE u.fmnum = '2813'
AND c.name = 'default'
);
但我收到以下错误:
错误:FROM 中的子查询必须有别名 LINE 2: ( ^ 提示:例如,FROM (SELECT ...) [AS] foo。
编辑 2
SELECT *
FROM (
SELECT TRUE, r.id
FROM rules r
JOIN rule_t c on c.id = r.rule_t.id
JOIN user u on u.id = r.user_id
WHERE u.fmnum = '2813'
AND c.name = 'default'
) AS x;
【问题讨论】:
-
我不明白这个问题。如果您知道正确的方法是从子选择中获取值,那么您真正要问的是什么?
-
我在问我是否可以返回两个值,一个来自 EXISTS,一个来自子查询。该方法的一些使用者可能只需要 Exists() 的布尔值,而其他人则需要两者。在这里我能做的越多,在调用这个sql查询的方法中我要做的就越少。
-
您可以在子查询中返回值,然后从中得出存在的值。
标签: sql postgresql