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
包装在这一点上是无用的。