gpt4 book ai didi

mysql - 如何比较sql中的多个值

转载 作者:行者123 更新时间:2023-11-29 13:23:08 24 4
gpt4 key购买 nike

我有两张 table

在单值“类”的第一个表中,“标签名称”和“标签值”中有多个(假设 9 个)值,我使用外键将这些值存储在数据库中。

表名设置此表中对于单个值有多个值这些多个值使用setting_name的外键存储在第二个表(表名称setting_tag)中

    table name "Setting"            table name "Setting_tag"

setting_name | tagname | tagvalue | setting_name
---------------- --------------------------------------------------------
Classroom | Explanation steps | Global | classroom
Lab
Tutorial Content Sequencing creator defined| classroom

Real time applications Necessary | classroom

Treatment of topic Comprehensive | classroom

Measurement Instruments No | classroom

Opportunity of errors No | classroom

Number of examples Low | classroom

Variations in assessment low | classroom

Variable manipulation 1 | classroom

类似地,在第二个表(存储库)中,“标签名称”和“标签字段”中的单个元素有多个值,但这些值(标签名称和标签值)可能是第一个表的子集

    table name "repository"          table name "repository_tag"

LO name | Tag name | Tag values | LO name
----------------------- ---------------------------------------------

Convo coding | Explanation steps | Global Convo coding

Content Sequencing both Convo coding

Real time applications Necessary Convo coding

Treatment of topic Comprehensive Convo coding

Measurement Instruments No Convo coding

Opportunity of errors No Convo coding

Number of examples Low Convo coding

Variations in assessment low Convo coding

Variable manipulation 1 Convo coding

Bloom’s Level Understand Convo coding

我的问题是如果匹配的值超过 3 个,那么如何将第一个表的标签名称和标签值与第二个表的每个元素进行比较,然后从存储库表返回 lo_name

提前致谢

最佳答案

两个表的联接可以匹配标签名称及其值:

SELECT *
FROM Table1 t1
JOIN Table2 t2
ON ( t1.`tagname`, t1.`tagvalue` )
=
( t2.`Tag name`, t2.`Tag values` )
;

上面的查询给出了两个表中匹配的标签+值对。


假设两个表中的所有标记+值对都是唯一的,我们可以计算此查询返回的行数并将结果与​​ 3 进行比较。

SELECT CASE WHEN 3 <= count(*)
THEN 'True'
ELSE 'Not true'
END as result
FROM (
SELECT *
FROM Table1 t1
JOIN Table2 t2
ON ( t1.`tagname`, t1.`tagvalue` )
=
( t2.`Tag name`, t2.`Tag values` )
LIMIT 3
) as subquery;

演示 --> http://www.sqlfiddle.com/#!2/0abf1/7

不需要 LIMIT 3 子句,但是它使查询更快,因为它阻止子查询连接表的全部内容 --> 我们不想获得总数的匹配对(这需要连接两个表中的所有行),我们只想知道是否存在至少 3 个匹配对 - 当我们找到 3 对时,我们可以停止寻找更多对,从而减少查询总时间。


当某些表中的对不唯一时,查询必须仅考虑不同的对
->GROUP BYDISTINCT 子句在这种情况下会有所帮助:

SELECT CASE WHEN 3 <= count(*)
THEN 'True'
ELSE 'Not true'
END as result
FROM (
SELECT t1.`tagname`, t1.`tagvalue`
FROM Table1 t1
JOIN Table2 t2
ON ( t1.`tagname`, t1.`tagvalue` )
=
( t2.`Tag name`, t2.`Tag values` )
GROUP BY t1.`tagname`, t1.`tagvalue`
LIMIT 3
) as subquery;

演示 --> http://www.sqlfiddle.com/#!2/0abf1/7

关于mysql - 如何比较sql中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com