2012-05-03 106 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)