我有一个名为T_COUNTRIES的表格,其中存储了所有国家/地区的不同语言的名称。
给定国家/地区代码的默认国家/地区名称由SYSCOUNTRY“ALL”和SYSLANG“eng”标识(请参阅紫罗兰中的行)。
如果找不到某种语言的翻译,应用程序将自动恢复为默认国家/地区名称。
所以我想删除所有与Default(紫罗兰色)相同的COUNTRYCODE和COUNTRYNAME记录(红色的记录),因为它们是重复的。
绿色的人应该留下来,因为某个COUNTRYCODE的COUNTRYNAME翻译与默认值不同。
我正在考虑这个问题,但它根本没有考虑到COUNTRYCODE:
SELECT * FROM T_COUNTRIES WHERE SYSCOUNTRY <> 'ALL' AND COUNTRYNAME IN
(SELECT COUNTRYNAME FROM T_COUNTRIES WHERE SYSCOUNTRY = 'ALL')
答案 0 :(得分:1)
您可以使用CONCAT选择绿色行:
SELECT *
FROM t_countries
WHERE syscountry <> 'ALL'
AND concat(countrycode, countryname) NOT IN
(SELECT concat(countrycode, countryname)
FROM t_countries
WHERE syscountry = 'ALL')
或者,以下是如何使用连接识别红色行:
SELECT t_countries.*
FROM t_countries
INNER JOIN
(SELECT countrycode, countryname
FROM t_countries
WHERE syscountry = 'ALL') sub
ON t_countries.countrycode = sub.countrycode
AND t_countries.countryname = sub.countryname
AND syscountry <> 'ALL'
答案 1 :(得分:0)
您可以将查询更改为
SELECT * FROM
T_COUNTRIES
WHERE COUNTRYNAME <>
(SELECT COUNTRYNAME FROM T_COUNTRIES WHERE SYSCOUNTRY = 'ALL')
根据您的评论,将查询更改为
SELECT * FROM
T_COUNTRIES
WHERE COUNTRYNAME =
(SELECT COUNTRYNAME FROM T_COUNTRIES WHERE SYSCOUNTRY = 'ALL')
答案 2 :(得分:0)
与SYSCOUNTRY =&#39; ALL&#39;相比,具有不同COUNTRYNAME的行该COUNTRYCODE的行。假设SYSCOUNTRY =&#39; ALL&#39;并且不存在1行。对于任何COUNTRYCODE。 (&#34;纠正&#34;行)。
SELECT *
FROM
T_COUNTRIES t
WHERE SYSCOUNTRY <> 'ALL'
AND COUNTRYNAME <> (SELECT t2.COUNTRYNAME
FROM T_COUNTRIES t2
WHERE t2.SYSCOUNTRY = 'ALL' AND t2.COUNTRYCODE = t.COUNTRYCODE)
要删除的行
SELECT *
FROM
T_COUNTRIES t
WHERE SYSCOUNTRY <> 'ALL'
AND COUNTRYNAME = (SELECT t2.COUNTRYNAME
FROM T_COUNTRIES t2
WHERE t2.SYSCOUNTRY = 'ALL' AND t2.COUNTRYCODE = t.COUNTRYCODE)