以下查询的逆运算是什么:
SELECT * FROM `test_result`
INNER JOIN `perinfo` ON `test_result`.`mobileno` = `perinfo`.`mobileno`
WHERE `perinfo`.`insti_id` = '2'
AND `test_id` = (SELECT `test_id`
FROM `test`
WHERE `test_name` = 'One')
我想从数据库表中选择行
perinfo
,其中insti_id
是2,并且它们也存在于数据表中test_result
试试这个:
SELECT * FROM `test_result` `t`
INNER JOIN `perinfo` ON `test_result`.`mobileno` = `perinfo`.`mobileno`
WHERE `perinfo`.`insti_id` = '2'
AND NOT EXISTS(SELECT 1 FROM `test`
WHERE `test_name` = 'One'
AND `test_id` = `t`.`test_id`)
您可以使用
!=
(不等于)条件而不是=
(等于)更改过滤器
SELECT * FROM `test_result`
INNER JOIN `perinfo` ON `test_result`.`mobileno` = `perinfo`.`mobileno`
WHERE `perinfo`.`insti_id` != '2'
AND `test_id` != (SELECT `test_id`
FROM `test`
WHERE `test_name` = 'One')
但是如果你有更多的子查询结果,你应该是 IN 或 NOT IN
SELECT * FROM `test_result`
INNER JOIN `perinfo` ON `test_result`.`mobileno` = `perinfo`.`mobileno`
WHERE `perinfo`.`insti_id` != '2'
AND `test_id` NOT IN (SELECT `test_id`
FROM `test`
WHERE `test_name` = 'One')
我不明白你所说的“查询的逆”是什么意思,但为了获得你想要使用的问题文本中描述的结果
SELECT *
FROM `perinfo`
INNER JOIN `test_result`
ON `test_result`.`mobileno` = `perinfo`.`mobileno`
WHERE `perinfo`.`insti_id` = '2'
换句话说,只需颠倒
perinfo
和 test_result
在查询中的位置,并删除 test
上的子选择,因为它未指定为所需结果的一部分。