查询的逆过程

问题描述 投票:0回答:3

以下查询的逆运算是什么:

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

mysql
3个回答
0
投票

试试这个:

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`)

0
投票

您可以使用

!=
(不等于)条件而不是
=
(等于)

更改过滤器
  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')

0
投票

我不明白你所说的“查询的逆”是什么意思,但为了获得你想要使用的问题文本中描述的结果

SELECT *
  FROM `perinfo`
  INNER JOIN `test_result` 
    ON `test_result`.`mobileno` = `perinfo`.`mobileno` 
  WHERE `perinfo`.`insti_id` = '2' 

换句话说,只需颠倒

perinfo
test_result
在查询中的位置,并删除
test
上的子选择,因为它未指定为所需结果的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.