有2个未连接的表,没有公共ID
+---------------------+
| names |
+------+--------------+
| name | lastN |
+-------------+-------+
| Anthony | monta |
| Ryo | shizu |
+------+--------------+
+----------------------+
| nicknames |
+------+---------------+
| nickname |
+------+---------------+
| miso_hungry |
+------+---------------+
我正在尝试在两个表上运行一个select查询,并且当前正在做类似的事情:
SELECT names.name, nicknames.nickname
FROM names, nicknames
WHERE names.name="miso_hungry" OR nicknames.nickname="miso_hungry"
我在重复相同的行时得到了一些奇怪的结果,这没有用。
例如,如果我使用上面的查询搜索miso_hungry,它会因某种原因返回“names”表的每一行,并从“nicknames”表中追加正确的行。
附上结果的屏幕截图
上面应该在name列下显示“NULL”,因为在该列中找不到“miso_hungry”,我不确定为什么它也会打印“names”表的每一行。
答案 0 :(得分:3)
您可以使用UNION子句
所以我们需要让它们满足上述条件。我们可以使用Aliasing来做到这一点。
SELECT name,(SELECT NULL) as nickname FROM names WHERE name = "miso_hungry"
UNION
SELECT (SELECT NULL) as name, nickname FROM nicknames WHERE nickname = "miso_hungry"
<强>被修改强>
如果您想从两个表中获取匹配计数,请使用如下所示的查询:
SELECT SUM(count) as count FROM (
SELECT count(*) as count FROM names WHERE name = "miso_hungry"
UNION ALL
SELECT count(*) as count FROM nicknames WHERE nickname = "miso_hungry"
) both_table
答案 1 :(得分:1)
您的对帐单中的执行顺序是from,where,select。使用和隐式连接,您将获得一个笛卡尔产品
use sandbox;
create table n(name varchar(20));
create table nn(nickname varchar(20));
insert into n values('Antony'),('Ryo');
insert into nn values('miso');
结果
MariaDB [sandbox]> SELECT n.name, nn.nickname
-> FROM n, nn;
+--------+----------+
| name | nickname |
+--------+----------+
| Antony | miso |
| Ryo | miso |
+--------+----------+
2 rows in set (0.00 sec)
然后应用where子句 - 产生相同的结果。