2015-04-05 60 views
0

我一直在問一個SQL查詢在採訪中得到了給定輸出。我無法解決它,但我仍然無法解決。我按照面試官的建議使用了連接,但無法獲得所需的輸出。面試結束了,但我仍然很好奇這個問題是如何解決的。也許u人可以幫助我使用SQL查詢

Table A 
x 
x 
Table B 
x 
Output: 
x x 
x NULL 

所以有兩個表的錶帶有1個柱和相同的元素和B表只有一個元素的兩行是相同的,如表A.現在我得輸出如上所示。 如何做到這一點?

P.S. X元素是所有表

同樣有一個簡單的辦法做到這一點不使用或mimicing的rownum的功能。也許如果我們用剛剛加入等功能,像工會什麼的?

+0

這意味着這兩個表沒有主鍵? – User2012384 2015-04-05 13:01:55

+0

我猜他們沒有。這就是元素是如何同 – Sidarth 2015-04-05 13:04:37

+0

剛纔我在MS SQL試過,我選擇了兩個表的行號,並使用行號作爲主鍵,因此他們不會被視爲一個單獨的記錄,如果你加入他們在一起想要,我可以發佈MS SQL,因爲我的電腦中沒有mySQL ... – User2012384 2015-04-05 13:10:21

回答

0

你應該能夠做到這一點與LEFT JOIN

SELECT ta,tb FROM table A LEFT JOIN table B ON ta=tb; 
+0

沒有。我已經嘗試過了。它使輸出爲1 1 1 1,我需要一個空的,而不是過去的1 – Sidarth 2015-04-05 13:03:25

0

這樣的可能?

$q = "SELECT table1.*, table2.* 
     FROM table1 INNER JOIN table2; 

$r = mysqli_query ($db_connnect, $q); 


echo "<table>"; 

while($row = mysqli_fetch_array($r)) { 

       echo "<tbody>"; 
        echo "<tr>"; 
         echo "<td>" . $row['table1_elament'] . " </td>"; 
         echo "<td>" . $row['table2_elamant'] . " </td>"; 
        echo "</tr>"; 
       echo "</tbody>"; 

} 

echo "</table>"; 
0

我不明白這將如何有用,但這裏是一個解決方案,在oracle中工作。

select ia.x, ib.x 
from (select x, rownum n from a) ia 
left outer join (select x, rownum n from b) ib 
on ib.n = ia.n 

SQL Fiddle

0

我不認爲這是可能僅使用連接而要做到這一種方法是編號的行中的每個表,做一個LEFT JOIN的行號:

select a.x, b.x 
from (
    select @a:[email protected]+1 'a_rank', a.x 
    from a, (select @a:=0) r 
) a 
left join (
    select @b:[email protected]+1 'b_rank', b.x 
    from b, (select @b:=0) r 
) b on a.a_rank = b.b_rank; 

Sample SQL Fiddle

+0

這個答案比我的好,因爲它工作在MySQL無需進行修改。我將我的答案留在原地,因爲它對oracle有用。 – Bob 2015-04-05 13:17:03

+0

哇這個查詢對我來說似乎很複雜。你能解釋一下這裏究竟發生了什麼嗎? – Sidarth 2015-04-05 13:52:39

+0

它使用在from子句的派生表中初始化爲0的變量,然後爲每一行增加它們。你可以閱讀更多有關用戶定義的變量在這裏:https://dev.mysql.com/doc/refman/5.7/en/user-variables.html – jpw 2015-04-05 13:58:12

0
select 
    temp.col1, 
    temp1.col1 
from (select col1,ROW_NUMBER() over (order by col1) as rownum from a)temp 
left join (select col1,ROW_NUMBER() over (order by col1) as rownum from b)temp1 
on temp.rownum=temp1.rownum