如果我希望得到一个布尔值1,如果id在其中一个表中,那么0如果不是,那么最好/最快的方式是什么?
A:2存在OR
SELECT
EXISTS(SELECT 1 FROM a WHERE id = 1)
OR EXISTS(SELECT 1 FROM b WHERE id = 1)
B:1存在UNION
SELECT EXISTS(
SELECT 1 FROM a WHERE id = 1
UNION
SELECT 1 FROM b WHERE id = 1)
C:有限制的联盟
SELECT 1 FROM a WHERE id = 1
UNION
SELECT 1 FROM b WHERE id = 1
UNION
SELECT 0
LIMIT 1
如果你的方法比我的3种解决方案更好,请写下来。
描述:
A:
+------+-------------+-------+-------+---------------+---------+---------+-------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+-------+---------------+---------+---------+-------+------+----------------+
| 1 | PRIMARY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| 3 | SUBQUERY | a | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
| 2 | SUBQUERY | b | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
+------+-------------+-------+-------+---------------+---------+---------+-------+------+----------------+
B:
+------+--------------+------------+-------+---------------+---------+---------+-------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+--------------+------------+-------+---------------+---------+---------+-------+------+----------------+
| 1 | PRIMARY | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| 2 | SUBQUERY | a | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
| 3 | UNION | b | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
| NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL | |
+------+--------------+------------+-------+---------------+---------+---------+-------+------+----------------+
C:
+------+--------------+--------------+-------+---------------+---------+---------+-------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+--------------+--------------+-------+---------------+---------+---------+-------+------+----------------+
| 1 | PRIMARY | a | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
| 2 | UNION | b | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
| 3 | UNION | NULL | NULL | NULL | NULL | NULL | NULL | NULL | No tables used |
| NULL | UNION RESULT | <union1,2,3> | ALL | NULL | NULL | NULL | NULL | NULL | |
+------+--------------+--------------+-------+---------------+---------+---------+-------+------+----------------+
答案 0 :(得分:0)
也许D(未经测试):
SELECT IFNULL((SELECT 1 FROM a,b WHERE a.id=1 OR b.id=1 LIMIT 1),0)