2012-05-03 149 views
2

假设我有列col1col2col3,在myTablecol4,我需要打印出独家值只有一列选择价值

因此,如果上述的样子

col1 col2 col3 col4 
    s  e  c  b 
    c  c  a  s 
    n  s  e  a 
    d  d  q  c 

然后输出应为N,Q b,因为它们是排他性只col1,分别col3col4

我怎样才能通过查询在MySQL的PHP​​?

编辑的重复不必须在单行。我现在已经改变了表格的布局要分清楚。

+1

我敢肯定有一些真实的数据不仅仅是字母 - 是这非常重要那是什么。 – 2012-05-03 00:45:36

+2

所有副本都在单行内复制。如果col2,col3或col4在*不同*行中有'n',是否会将其从期望的结果中移除? –

+0

是的,他们不必在一行中。对不起格式化 – jmishra

回答

1

如果你正在寻找一个只有SQL的解决方案,你可以做一个查询每列如下:

SELECT 
    col1 AS unique_on_col1 
FROM table 
WHERE  col1 NOT IN (SELECT col2 FROM table) 
     AND col1 NOT IN (SELECT col3 FROM table) 
     AND col1 NOT IN (SELECT col4 FROM table) 

这是可能的所有四个查询与UNION结合,但取决于可能没有必要什么你想要处理数据。另外,这个查询不能很好地处理大数据集。让所有的人都在一次

0
$sql = " 
    SELECT DISTINCT 'col1' as descr,col1 as val FROM myTable 
    UNION 
    SELECT DISTINCT 'col2' as descr,col2 as val FROM myTable 
    UNION 
    SELECT DISTINCT 'col3' as descr,year as val FROM myTable"; 

$result = @mysql_query($sql, $con) or die(mysql_error()); 

while($row = mysql_fetch_array($result)) { 
    $make_array[$row['descr']][]=$row['val']; 
} 

我猜这应该有效。 Dint尝试编码,但给这一个镜头,让我们知道。

+0

对不起,但它没有工作 – jmishra

1

一个稍微更紧凑的方式:

select distinct col1 
    from myTable 
where col1 not in (select a.col1 
        from myTable a join myTable b 
         on a.col1 = b.col2 or a.col1=b.col3 or a.col1=b.col4) 
union 
select distinct col2 
    from myTable 
where col2 not in (select a.col2 
        from myTable a join myTable b 
         on a.col2 = b.col1 or a.col2=b.col3 or a.col2=b.col4) 
union 
select distinct col3 
    from myTable 
where col3 not in (select a.col3 
        from myTable a join myTable b 
         on a.col3 = b.col1 or a.col3=b.col2 or a.col3=b.col4) 
union 
select distinct col4 
    from myTable 
where col4 not in (select a.col4 
        from myTable a join myTable b 
         on a.col4 = b.col1 or a.col4=b.col2 or a.col4=b.col3) 
0

试试这个:

SELECT col1 AS unique_on_col1 
FROM table 
WHERE col1 NOT IN (SELECT col2 FROM table) 
    AND col1 NOT IN (SELECT col3 FROM table) 
    AND col1 NOT IN (SELECT col4 FROM table)