【问题标题】:How to retrive matching and non-matching records in Mysql?如何在 Mysql 中检索匹配和不匹配的记录?
【发布时间】:2019-11-11 07:32:32
【问题描述】:

我正在尝试在 mysql 中检索匹配和不匹配的记录。

center_wise_test_rates:

lab_id   category_name   test_id   test_name           rate
------   -------------   --------  ---------           ------
2        Cardiology       9        Blood Sug           1200
2        Cardiology      10       Total Cholesterol    1500
2        Cardiology      11       HDL                  1100
2        Cardiology      12       LDL                  750


test_list

test_id  category_name       test_name
-------  -------------       ---------
9        Cardiology          Blood Sug
10       Cardiology          Total Cholesterol
11       Cardiology          HDL
12       Cardiology          LDL
57       Cardiology          abc   

从基于 category_name 和 lab_id 的 center_wise_test_rates 和 test_list 表中,匹配的记录将得到但不匹配的记录,即 test name 'abc' 没有得到。

我的查询:

SELECT cwtr.lab_id
      ,cwtr.category_name
      ,cwtr.test_id
      ,cwtr.test_name
      ,cwtr.rate
FROM `center_wise_test_rates` AS cwtr
LEFT OUTER JOIN test_list AS tl ON tl.category_name = (SELECT DISTINCT category_name
                                                       FROM center_wise_test_rates 
                                                       WHERE category_name='Cardiology')
                                AND tl.test_id = cwtr.test_id
WHERE cwtr.lab_id = '2'
AND cwtr.category_name = 'Cardiology'

输出:

lab_id  category_name  test_id  test_name        rate
------   ------------  -------- ---------        ----
2        Cardiology       9     Blood Sug        1200
2        Cardiology      10    Total Cholesterol 1500
2        Cardiology      11       HDL            1100
2        Cardiology      12       LDL            750

预期输出:

 lab_id  category_name  test_id   test_name          rate
 ------  -------------  --------  ---------          ----
  2      Cardiology       9       Blood Sug          1200
  2      Cardiology      10       Total Cholesterol  1500
  2      Cardiology      11       HDL                1100
  2      Cardiology      12       LDL                 750
  2      Cardiology      57       abc                 Null

提前致谢。

【问题讨论】:

  • 如果你也分享你的尝试会更好。
  • 我觉得这张照片是他/她的老师拍的

标签: mysql


【解决方案1】:

它将从 TABLE1 中选择条件匹配或不匹配的所有值。

 SELECT coulmn1, column2 FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.ID= TABLE2.ID WHERE NAME = 'ABC'

【讨论】:

    【解决方案2】:

    您所需要的只是一个 LEFT JOIN -

    SELECT (SELECT lab_id
            FROM center_wise_test_rates
            WHERE category_name = tl.category_name
            LIMIT 1) lab_id
          ,tl.category_name
          ,tl.test_id
          ,tl.test_name
          ,cwtr.rate 
    FROM test_list tl
    LEFT JOIN center_wise_test_rates cwtr ON tl.test_id = cwtr.test_id
                                          AND tl.category_name = cwtr.category_name
    

    Here 是演示。

    【讨论】:

    • 谢谢!代码不错,但没有写出我预期的输出。
    • @suresh,请立即尝试。
    • 您的查询返回了我的输出,但它没有返回我的预期输出。如果,是否可以通过更改两个表来返回我的预期输出。如果,是让我知道吗?
    • 谢谢@Ankit Bajpai。很好。
    • @suresh,随时欢迎您。很高兴知道我能为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2023-04-04
    • 2011-11-27
    • 1970-01-01
    相关资源
    最近更新 更多