所有可能的行没有重复

时间:2013-03-23 21:44:21

标签: mysql

我有两列与音乐相关数据库的情绪相对应 - 情绪,情绪2

我想返回所有可能的行而不重复。在这个网站上遇到了类似的答案,我已经调整了如下的查询,但仍然没有得到任何可见的结果。

$resultMOODinner = mysql_query

("SELECT (var) FROM (
     SELECT Mood AS var FROM Music
     UNION
     SELECT Mood2 AS var FROM Music
                   )
AS Temp ");

while ($rowMOOD2 = mysql_fetch_array($resultMOODinner, MYSQL_ASSOC))
  {
$Mood = $rowMOOD2["Temp"];
echo "$Mood";
  }

2 个答案:

答案 0 :(得分:0)

根据其他地方的评论,最简单的解决方案是使用SELECT DISTINCT:

SELECT DISTINCT var 
FROM (
      SELECT Mood AS var FROM Music 
      UNION SELECT Mood2 AS var FROM Music
) as temp

然而,这必须对数据库进行两次拖网 - 但数据库的全部意义在于它管理大量数据 - 您应该很少一次查看所有数据 - 实际上您应该积极寻求其他解决方案。但是现在无视这一点,更强大的高效解决方案是只读取一次数据:

SELECT DISTINCT IF (mult.val='A', mood, mood2)
FROM music,
(SELECT 'A' UNION SELECT 'B') mult

BTW你的PHP代码正在选择一个不在你的查询中的属性 - 临时别名应用于子查询。)

但是根据您提供的信息,可以得出的唯一可能结论是您的数据库未规范化 - 因此正确解决方案是规范化您的数据库。

答案 1 :(得分:-1)

使用DISTINCT:

 SELECT DISTINCT Mood AS var FROM Music
 SELECT DISTINCT Mood2 AS var FROM Music