不同的问题

时间:2010-10-15 02:51:47

标签: mysql

我有一张有两个字段的表;名字和名字名字

我想选择Distinct lastnames但显示第一个&结果中的姓氏......例如:

'SELECT DISTINCT lastname FROM people

将只返回姓氏。我怎样才能显示名字?

4 个答案:

答案 0 :(得分:2)

SQL通常不会对歧义做出很好的反应。如果您只想包含一个姓氏实例,但任何一个对应的名字,您必须描述如何选择哪个名字(即使您并不在意)。也许:

SELECT MIN(firstname), lastname
FROM ...
GROUP BY lastname

答案 1 :(得分:0)

假设您有这些数据:

LastName   FirstName
Jones      Bob
Jones      Dave

你想同时展示“Bob Jones”和“Dave Jones”吗? 然后你会这样做:

SELECT DISTINCT FirstName,LastName FROM people

如果那不是你想要的,你如何确定使用哪个名字?

答案 2 :(得分:0)

<?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

非常简单但很好的教程,我认为完美适用!

答案 3 :(得分:0)

考虑到您正在使用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和分析函数,因此很难随机化这样的事情。