我在phpmyadmin(4.5.2)中尝试了这个并且工作正常:
(SELECT 'db1' as DB_NAME, db1_col1, null as dbd2_col1 FROM db1.db1_table1)
UNION
(SELECT 'db2' as DB_NAME, null as dbd1_col1, db2_col1 FROM db2.db2_table1)
The result is:
DB_NAME db1_col1 dbd2_col1
db1 DB1_col1_val1 NULL
db2 NULL DB2_col1_val1
但如果我尝试添加一个where子句,我会收到sintax错误:
(SELECT 'db1' as DB_NAME, db1_col1, null as dbd2_col1
FROM db1.db1_table1
WHERE db1_col1 = 'DB1_col1_val1'
)
UNION
(SELECT 'db2' as DB_NAME, null as dbd1_col1, db2_col1
FROM db2.db2_table1
WHERE db2_col1 = 'DB1_col1_val1'
)
1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在UNION附近使用正确的语法 ('第4行
这让我发疯了!
尽管如此,当我在控制台上尝试它时,它仍然有效:
mysql> (SELECT 'db1' as DB_NAME, db1_col1, null as dbd2_col1
-> FROM db1.db1_table1
-> WHERE db1_col1 = 'DB1_col1_val1'
-> )
-> UNION
-> (SELECT 'db2' as DB_NAME, null as dbd1_col1, db2_col1
-> FROM db2.db2_table1
-> WHERE db2_col1 = 'DB1_col1_val1'
-> );
+---------+---------------+-----------+
| DB_NAME | db1_col1 | dbd2_col1 |
+---------+---------------+-----------+
| db1 | DB1_col1_val1 | NULL |
+---------+---------------+-----------+
1 row in set (0.00 sec)
问题是:
这是phpmyadmin的错误还是我错过了其他内容?
答案 0 :(得分:1)
由于它在控制台中工作,它可能是一个phpmyadmin错误。我的猜测是phpmyadmin尝试在第一个查询的右括号后插入其limit
子句。
更新
显然,这与修复here的错误相同。如果你升级到phpmyadmin v4.5.3.0或更高版本,那么这个bug就不再存在了。
答案 1 :(得分:0)
您使用phpmyadmin文档表明您忘记了;在您的请求结束时。它存在于控制台文档中。只是一个想法。