我有一个包含3列的表格,如下所示:
+------------+---------------+-------+
| Country_id | country_title | State |
+------------+---------------+-------+
此表中有许多记录。其中一些人有state
而另一些则没有。现在,想象一下这些记录:
1 | Canada | Alberta
2 | Canada | British Columbia
3 | Canada | Manitoba
4 | China |
我需要没有任何重复的国名。实际上我需要他们的id
和title
,最好的SQL命令是什么?我在下面的表单中使用了DISTINCT
但是我无法获得适当的结果。
SELECT DISTINCT title,id FROM tbl_countries ORDER BY title
我想要的结果是这样的:
1, Canada
4, China
答案 0 :(得分:85)
试试这个:
SELECT MIN(id) AS id, title
FROM tbl_countries
GROUP BY title
答案 1 :(得分:27)
DISTINCT
是关键字
对我来说,你的查询是正确的
首先尝试这样做
SELECT DISTINCT title,id FROM tbl_countries
稍后您可以尝试订购。
答案 2 :(得分:10)
要使用DISTINCT
关键字,您可以像这样使用它:
SELECT DISTINCT
(SELECT min(ti.Country_id)
FROM tbl_countries ti
WHERE t.country_title = ti.country_title) As Country_id
, country_title
FROM
tbl_countries t
使用ROW_NUMBER()
时,您可以像这样使用它:
SELECT
Country_id, country_title
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY country_title ORDER BY Country_id) As rn
FROM tbl_countries) t
WHERE rn = 1
使用LEFT JOIN
也可以使用:
SELECT t1.Country_id, t1.country_title
FROM tbl_countries t1
LEFT OUTER JOIN
tbl_countries t2 ON t1.country_title = t2.country_title AND t1.Country_id > t2.Country_id
WHERE
t2.country_title IS NULL
使用EXISTS
,您可以尝试:
SELECT t1.Country_id, t1.country_title
FROM tbl_countries t1
WHERE
NOT EXISTS (SELECT *
FROM tbl_countries t2
WHERE t1.country_title = t2.country_title AND t1.Country_id > t2.Country_id)
答案 3 :(得分:0)
在MySQL中,可以使用特殊的列函数GROUP_CONCAT:
SELECT GROUP_CONCAT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'computers' AND
TABLE_NAME='Laptop' AND
COLUMN_NAME NOT IN ('code')
ORDER BY ORDINAL_POSITION;
应该提到的是,MySQL中的信息模式涵盖了所有数据库服务器,而不是某些数据库。这就是为什么如果不同的数据库包含具有相同名称的表,WHERE子句的搜索条件应指定模式名称:TABLE_SCHEMA ='计算机'。
字符串与MySQL中的CONCAT函数连接在一起。我们问题的最终解决方案可以在MySQL中表示为
SELECT CONCAT('SELECT ',
(SELECT GROUP_CONCAT(COLUMN_NAME)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='computers' AND
TABLE_NAME='Laptop' AND
COLUMN_NAME NOT IN ('code')
ORDER BY ORDINAL_POSITION
), ' FROM Laptop');
答案 4 :(得分:0)
rowid
条款是在Oracle中查找重复条目并使用DELETE FROM products WHERE rowid IN (
SELECT MAX(sl) FROM (
SELECT itemcode, (rowid) sl FROM products WHERE itemcode IN (
SELECT itemcode FROM products GROUP BY itemcode HAVING COUNT(itemcode)>1
)) GROUP BY itemcode);
的最简单方法,我们可以删除重复数据..
{{1}}
答案 5 :(得分:0)
试试这个
SELECT country_id, country_title
FROM (SELECT country_id, country_title,
CASE
WHEN country_title=LAG(country_title, 1, 0) OVER(ORDER BY country_title) THEN 1
ELSE 0
END AS "Duplicates"
FROM tbl_countries)
WHERE "Duplicates"=0;
答案 6 :(得分:0)
忽略SQL中的重复行。我想这可能会对你有帮助。
SELECT res2.*
FROM
(SELECT res1.*,ROW_NUMBER() OVER(PARTITION BY res1.title ORDER BY res1.id)as num
FROM
(select * from [dbo].[tbl_countries])as res1
)as res2
WHERE res2.num=1
答案 7 :(得分:0)
select Country_id,country_title from(
select Country_id,country_title,row_number() over (partition by country_title
order by Country_id ) rn from country)a
where rn=1;
答案 8 :(得分:0)
删除复杂查询的重复行
首先将结果存储到#TempTable或@TempTableVariable
从#TempTable或@TempTableVariable中删除您的条件
然后选择其余数据。
如果需要创建行号,请创建一个标识列。