我有两个表国家和用户。我想查看用户已禁用的国家/地区名称。所以我为此写了一个查询。
SELECT DISTINCT cntr_id,cntr_name FROM
(SELECT COUNTRY.cntr_id, COUNTRY.cntr_name, USERS.user_enabled,
USERS.user_name, USERS.user_id
FROM COUNTRY INNER JOIN Users
ON COUNTRY.cntr_id = USERS.cntr_id
)
AS TAB where user_enabled = 0
我的问题是:
这是内部查询吗?
在运行外部查询之前,查询是否会从数据库中获取所有国家/地区(包括已启用用户)?
还有其他方法可供选择吗?
答案 0 :(得分:0)
要回答你的问题,
是内部和外部两个查询。
内部查询将获取满足连接条件的所有行。
是的,还有其他方法可以选择在内部查询中直接应用过滤器的位置,并删除外部选择。
SELECT COUNTRY.cntr_id, COUNTRY.cntr_name, USERS.user_enabled,
USERS.user_name, USERS.user_id
FROM COUNTRY INNER JOIN Users
ON COUNTRY.cntr_id = USERS.cntr_id
WHERE
USERS.user_enabled = 0
答案 1 :(得分:0)
是的,它是一个内部查询,将获取您需要的内容,但您不需要外部SELECT
查询。你可以这样做:
SELECT DISTINCT COUNTRY.cntr_id, COUNTRY.cntr_name
FROM COUNTRY INNER JOIN Users
ON COUNTRY.cntr_id = USERS.cntr_id
WHERE USERS.user_enabled = 0
答案 2 :(得分:0)
您不必为此使用外部查询。
SELECT DISTINCT C.cntr_id, C.cntr_name
FROM COUNTRY C INNER JOIN
Users U ON C.cntr_id = U.cntr_id
WHERE U.user_enabled=0
或强>
SELECT C.cntr_id, C.cntr_name
FROM COUNTRY C INNER JOIN
Users U ON C.cntr_id = U.cntr_id
WHERE U.user_enabled=0
GROUP BY C.cntr_id, C.cntr_name