查询逆

时间:2018-08-27 12:41:07

标签: mysql

以下查询的逆运算是什么

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

我想从insti_id为2的数据库表“ perinfo”中选择行,并且它们也存在于数据表“ test_result”中

3 个答案:

答案 0 :(得分: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`)

答案 1 :(得分: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')

答案 2 :(得分:0)

我不理解您所说的“查询逆”是什么意思,但是要获得您要使用的问题文本中描述的结果

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

换句话说,只需反转查询中perinfotest_result的位置,并删除test上的子选择,因为未将其指定为期望结果的一部分。