我在面试中被问过一个SQL查询。我无法解决它仍然无法解决。我按照面试官的建议使用了连接,但无法获得所需的输出。采访结束了,但我仍然很好奇这个问题是如何解决的。也许你们可以帮助我
Table A
x
x
Table B
x
Output:
x x
x NULL
所以有两个表A表1列,2行相同元素,表b只有一个元素,与表A相同。现在我必须得到如上所示的输出。 怎么做?
P.S。元素x在所有表中都是相同的
有没有一种简单的方法可以在不使用或模仿rownum函数的情况下完成它。也许如果我们只使用join和其他函数如union或者什么?
答案 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
答案 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;
答案 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