SELECT DISTINCT一列但返回全部

时间:2013-07-02 07:58:11

标签: sql

我有这样的查询:

$sql_place = "SELECT * FROM place
INNER JOIN join_appointment_place 
ON join_appointment_place.id_place = place.id_place
INNER JOIN join_event_appointment 
ON join_appointment_place.id_appointment = join_event_appointment.id_appointment
WHERE join_event_appointment.id_event = " . $EVENT_ID . "
ORDER BY place.title, place.category";

问题是我需要返回所有不同titles的地方。所以我应该使用DISTINCT。但是,如何选择DISTINCT title并同时返回所有其他值?

  $sql_place = "SELECT 
  DISTINCT 
  place.id_place, 
  place.avatar, 
  place.category, 
  place.title, 
  place.description, 
  place.address, 
  place.latitude,
  place.longitude, 
  place.email, 
  place.web, 
  place.shared FROM place
  INNER JOIN join_appointment_place 
  ON join_appointment_place.id_place = place.id_place
  INNER JOIN join_event_appointment 
  ON join_appointment_place.id_appointment = join_event_appointment.id_appointment
  WHERE join_event_appointment.id_event = " . $EVENT_ID . "
  ORDER BY place.title, place.category";

以上就是我的尝试。但我担心的是,不仅将DISTINCT应用于title,而且应用于每个选定的列,这不是我要寻找的。 感谢您的帮助:))

4 个答案:

答案 0 :(得分:1)

如果你想获得这些头衔,请尝试使用GROUP BY place.title。

答案 1 :(得分:0)

是的,它会在每一列都返回一个独特的但这并不是坏事。例如,像这样的独特查询可以返回:

Col1    Col2    Col3    Col4
1       ABC     XYZ     Y
1       ABC     XYZ     N

虽然你的问题听起来好像你希望它只为每一列检索不同的值。

答案 2 :(得分:0)

正确的查询是使用GROUP BY 不管怎样,谢谢。

$sql_place = "SELECT * FROM place
                  INNER JOIN join_appointment_place ON join_appointment_place.id_place = place.id_place
                  INNER JOIN join_event_appointment ON join_appointment_place.id_appointment = join_event_appointment.id_appointment
                  WHERE join_event_appointment.id_event = " . $EVENT_ID . "
                  GROUP BY place.title ORDER BY place.title, place.category";

答案 3 :(得分:-1)

如果您担心,可以使用嵌套查询。

选择不同的标题并使用外部查询的where子句中的结果。

e.g。

SELECT * FROM Customers
WHERE title IN (SELECT DISTINCT title FROM titles WHERE title > 'X');