我有兩個字段的表;姓名&姓氏不同的問題
我想SELECT DISTINCT lastnames但結果同時顯示第一&姓氏...例如:
'SELECT DISTINCT lastname FROM people
將僅返回姓氏。我怎樣才能顯示名字?
我有兩個字段的表;姓名&姓氏不同的問題
我想SELECT DISTINCT lastnames但結果同時顯示第一&姓氏...例如:
'SELECT DISTINCT lastname FROM people
將僅返回姓氏。我怎樣才能顯示名字?
SQL通常不會很好地解決模糊問題。如果你只想包含姓氏的一個實例,但是任何一個名字都相應,你必須描述如何選擇哪個名字(即使你不太在意)。也許:
SELECT MIN(firstname), lastname
FROM ...
GROUP BY lastname
比方說,你有這樣的數據:
LastName FirstName
Jones Bob
Jones Dave
你想顯示兩個「鮑勃·瓊斯」和「戴維·瓊斯」? 然後,你會怎麼做:
SELECT DISTINCT名字,姓氏FROM人
如果這不是你想要什麼,你如何確定使用哪個名字?
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
$result = mysql_query("SELECT * FROM Persons");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br />";
}
mysql_close($con);
?>
來自
http://www.w3schools.com/php/php_mysql_select.asp
很簡單,但很好的教程,我認爲適用於完美!
考慮你正在使用MySQL,該查詢工作,並返回一個「隨機」的名字(它可能總是返回相同的一段時間,然後更新之後更改/刪除/插入查詢):
SELECT FirstName, LastName FROM people GROUP BY LastName
請注意此查詢不會工作在任何智能RDMBS(即不是MySQL)上。一個好辦法做到這一點(實際上是隨機挑選的名字)是通過使用分析功能(PostgreSQL的語法):
WITH TT AS (
SELECT FirstName, LastName, ROW_NUMBER() OVER(PARTITION BY LastName ORDER BY random()) AS R
FROM people
)
SELECT FirstName, LastName
FROM TT
WHERE R = 1;
不幸的是你,MySQL不知道CTE和分析功能,使得它更難隨機化這樣的事情。
即使有可能,這樣的查詢有什麼用途?想想看,沒有一個單獨的姓氏與分組的姓氏關聯......也許你想隨機選擇一個人? – 2010-10-15 02:52:35
正如我指出的那樣,這顯然是不可能的(正如你打算的) – 2010-10-15 02:54:49
只需選擇所有數據,然後在應用程序的表示層中實現這個分組概念 – RyanHennig 2010-10-15 02:57:17