使用sql查询获取给定的输出

时间:2015-04-05 12:54:02

标签: mysql sql database join

我在面试中被问过一个SQL查询。我无法解决它仍然无法解决。我按照面试官的建议使用了连接,但无法获得所需的输出。采访结束了,但我仍然很好奇这个问题是如何解决的。也许你们可以帮助我

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

所以有两个表A表1列,2行相同元素,表b只有一个元素,与表A相同。现在我必须得到如上所示的输出。 怎么做?

P.S。元素x在所有表中都是相同的

有没有一种简单的方法可以在不使用或模仿rownum函数的情况下完成它。也许如果我们只使用join和其他函数如union或者什么?

6 个答案:

答案 0 :(得分:0)

你应该可以通过LEFT JOIN

来做到这一点
SELECT ta,tb FROM table A LEFT JOIN table B ON ta=tb;

答案 1 :(得分: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>";

答案 2 :(得分: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

答案 3 :(得分:0)

我认为只使用连接是可能的,但是一种方法是对每个表中的行进行编号并对行号进行左连接:

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

Sample SQL Fiddle

答案 4 :(得分: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

答案 5 :(得分:0)

select x.id,y.id
from (select id,ROW_NUMBER() over (order by id) as a from A)x
left join (select id,ROW_NUMBER() over (order by id) as a from B)y
on x.a =y.a