SELECT * FROM table1 WHERE ID IN (SELECT ID IN table2);
输出:它只选择第一行,但选择
SELECT * FROM table1 WHERE ID IN (1,2);
输出:选择两行
这些是我正在使用的确切查询
mysql> show create table tmp_product_ids;
+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| tmp_product_ids | CREATE TABLE `tmp_product_ids` (
`product__id` int(11) DEFAULT NULL,
`order__id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------------+------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from tmp_product_ids;
+-------------+-----------+
| product__id | order__id |
+-------------+-----------+
| 1 | 2 |
| 2 | 1 |
+-------------+-----------+
2 rows in set (0.01 sec)
mysql> select * from tmp_product_ids where product__id in (1,2);
+-------------+-----------+
| product__id | order__id |
+-------------+-----------+
| 1 | 2 |
| 2 | 1 |
+-------------+-----------+
2 rows in set (0.00 sec)
mysql> select group_concat(product__id) from tmp_product_ids;
+---------------------------+
| group_concat(product__id) |
+---------------------------+
| 1,2 |
+---------------------------+
1 row in set (0.00 sec)
mysql> select * from tmp_product_ids where product__id in (select group_concat(product__id) from tmp_product_ids);
+-------------+-----------+
| product__id | order__id |
+-------------+-----------+
| 1 | 2 |
+-------------+-----------+
1 row in set (0.00 sec)
任何人都可以解释这种行为吗?
如何在不使用连接的情况下编写用于删除行delete from table1 where ID in (select ID from table2)
的mysql查询?
注意:
我已经使用group_concat函数从不同的表中获取id:
答案 0 :(得分:0)
你IN声明有点偏。因为你有这样的文字:
WHERE ... IN ('2,1')
查询正在查找文字字符串[' 2,1']。你需要将每个包含在刻度中:
WHERE ... IN ('2','1')
或者如果这是一个整数字段:
WHERE ... IN (2,1)
希望这有帮助。
答案 1 :(得分:0)
前两个查询的结果取决于表中的数据。你的最后两个查询只返回一个布尔值,你问
是1 {2,1}的组件?
结果为1(真)。如果你问
是{' 1,2'}?
的组成部分
它正确返回0(false)。
您收到的警告可能是因为您要将整数值与字符串进行比较。另见Wes的答案。
答案 2 :(得分:0)
如何编写用于删除行的mysql查询
您可以编写一个简单的连接查询,例如
.on("click", (e: NVEdge) => { console.log("toto") })
如果没有DELETE table1
FROM table1
INNER JOIN table2 ON table1.id = table2.id;
,您也可以使用子查询
JOIN
你也可以使用delete from table1
where ID in (select distinct ID from table2);
之类的
WHERE EXISTS
同样,您的第一个查询delete from table1 t1
where exists (select 1 from table2 where id = t1.id);
会返回1行,因此最有可能select * from table1 where ID in (select ID in table2);
只有1条记录。
执行table2
验证相同。
答案 3 :(得分:0)
所以这是一个快速解释。
所以你说DELETE FROM Table_1 WHERE ID IN (SubQuery);
将在subquery
中选择WHATver,并且ID
中与ID
相同的Table_1
将被删除。
在删除之前,您可以单独执行subquery
。并且您将了解选择了多少行以及与Table_1
匹配的行数。
您还可以在WHERE
中添加subquery
条件。
DELETE FROM Table_1 WHERE ID IN (SELECT ID From Table_2 WHERE Name = 'John');
如果您正在撰写IN
条款,那么strings
WHERE ID IN ('1','2','3');
OR
如果是INT
WHERE ID IN (1,2,3);