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

Php 使用DISTINCT和UNION在SQL查询中获取字段名,php,mysql,sql,union,distinct,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

我有以下疑问:

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

如何执行此操作?

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

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

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

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

然后,您可以使用substring从右侧删除最后2个

,如果在2列或更多列中找到一个值,那么应该显示什么?将显示什么?这应该是字符串连接吗?是的,我在ms sql中尝试过。你可能需要在mysql中添加一些东西来连接它。但在理论上它应该可以工作。
+
仅在sql Server中作为concat操作符工作(我认为在某些编程语言中,如VB中).对,这就是我正在使用的。我非常确定在mysql中,您需要添加一个CONCAT(sex,'1'),然后您仍然可以使用substring函数删除“1”。这可能是实现OP要求的最糟糕的方法,在数据库性能方面。发动机必须首先用
'1'
零件连接4行中的所有值,然后对4个温度进行
联合。表,这意味着对临时表进行排序(不可能使用索引)以查找重复项。最后用
DISTINCT
包装在这一点上是无用的。