簡體   English   中英

在mysql中只選擇唯一的行/記錄

[英]Select only unique row/record in mysql

我想看看如何才能獲得具有獨特城市的唯一行/記錄,而不關心它是否是資本,例如:

Akron
akron
aKRON

只返回一條記錄。

我累了這樣的東西,但它不起作用

"SELECT DISTINCT(city) AS city,state_prefix,lattitude,longitude  FROM zip_code WHERE city LIKE '$queryString%' LIMIT 10"

謝謝...

你可以使用這個僅限mysql的技巧:

SELECT city, state_prefix, lattitude,longitude
FROM zip_code WHERE city LIKE '$queryString%'
GROUP BY city, state_prefix -- Here's the trick
LIMIT 10

這將返回為citystate_prefix每個唯一值遇到第一行

其他數據庫會抱怨您有非= -aggregated列未在組中列出或某些此類消息。

編輯

以前我聲稱不使用分組列上的upper()函數,它將返回所有大小寫變體,但這是不正確的 - 感謝SalmanA指出了這一點。 我使用SQLFiddle進行了驗證,您不需要使用upper()

它不適用於其他DBMS,但在MySql中你可以使用它:

SELECT city, state_prefix,lattitude,longitude
FROM zip_code WHERE city LIKE '$queryString%'
GROUP BY city
LIMIT 10

比較字符串時,MySql忽略大小寫,例如,這返回true:

select 'hello'='Hello '

並且您還可以按單個字段(在本例中為城市)進行分組,並返回所有其他字段。 其他字段的值未確定,它們通常是第一行中的值,但您無法對其進行中繼。

您可以在GROUP BY中使用函數將所有名稱轉換為大寫或小寫:

 SELECT  city,state_prefix,lattitude,longitude 
        FROM zip_code WHERE city LIKE '$queryString%'
        GROUP BY UPPER(city), UPPER(state_prefix) LIMIT 10

我假設一個城市和州的比賽,經度和經度可以安全地卷起來。

您的表格或城市列可能具有區分大小寫的排序規則設置。

您可以像這樣在SELECT語句中顯式選擇排序規則。 如果選擇不區分大小寫的排序規則, DISTINCT關鍵字將執行您希望它執行的操作。

SELECT DISTINCT
        city COLLATE utf8_general_ci,
        state_prefix COLLATE utf8_general_ci,
        lattitude,longitude  
 FROM zip_code 
WHERE city LIKE '$queryString%' 
LIMIT 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM