使用DISTINCT和UNION在SQL查询中获取字段名称

时间:2011-12-07 22:17:39

标签: php mysql sql union distinct

我有以下查询:

SELECT DISTINCT(uniq)
FROM
(
    SELECT sex AS uniq FROM type4
    UNION
    SELECT fason AS uniq FROM type4
    UNION
    SELECT color AS uniq FROM type4
    UNION
    SELECT size AS uniq FROM type4
) AS Temp

它运作得很好,它返回:

[uniq] => some unique value

是否可以知道此唯一值来自哪个列? 我的意思是这样的:

[uniq] => some unique value
[from] => size

我该怎么做?

2 个答案:

答案 0 :(得分:3)

您的原始查询不需要子查询,也不需要DISTINCT。你可以使用:

SELECT sex AS uniq FROM type4
UNION
SELECT fason FROM type4
UNION
SELECT color FROM type4
UNION
SELECT size FROM type4

现在针对您的问题,如果四列没有重叠值,您可以使用:

  SELECT DISTINCT sex AS uniq
                , 'sex' AS FromColumn 
  FROM type4
UNION ALL
  SELECT DISTINCT fason 
                , 'fason' 
  FROM type4
UNION ALL
  SELECT DISTINCT color 
                , 'color' 
  FROM type4
UNION ALL
  SELECT DISTINCT size 
                , 'size' 
  FROM type4

答案 1 :(得分:2)

SELECT DISTINCT(uniq)
FROM
(
    SELECT (sex + ' 1') AS uniq FROM type4
    UNION
    SELECT (fason + ' 2') AS uniq FROM type4
    UNION
    SELECT (color + ' 3') AS uniq FROM type4
    UNION
    SELECT (size + ' 4') AS uniq FROM type4
) AS Temp

然后您可以使用子字符串从右侧删除最后2个