SELECT * FROM `products` WHERE id IN(
(SELECT `id` FROM `products`)
UNION ALL
(SELECT `id` FROM `products`)
) ;
这个语句在逻辑上就存在问题, 或者说, union 完全没有实际作用, 连接的两张表是同已个表. 那结果就是把一张表的 ID 给复制了一份, 比如 products 有 id {1,2,3} 那么 union 的结果就是 id {1,1,2,2,3,3} 然后还拿这结果做 in 条件, 还是查询这张表, 那最终查询出来的结果还是 products 原来的数据, in 会匹配所有符合的记录, 重复的 ID 不会查出两条.
select * 这里 字段个数不确定, 这里的字段个数应该和你union all 后面查出来的字段个数是一样的才行。
如果需要补位,就在union 后面加数字补位:
SELECT * FROM
productsWHERE id IN(SELECTidFROMproductsUNION ALL SELECTidFROMproducts) ;我有点好奇,你为什么要这样写
这个语句在逻辑上就存在问题, 或者说, union 完全没有实际作用, 连接的两张表是同已个表. 那结果就是把一张表的 ID 给复制了一份, 比如 products 有 id {1,2,3} 那么 union 的结果就是 id {1,1,2,2,3,3} 然后还拿这结果做 in 条件, 还是查询这张表, 那最终查询出来的结果还是 products 原来的数据, in 会匹配所有符合的记录, 重复的 ID 不会查出两条.
所以, 等价于
不明白你想要什么