mysql,在多行中搜索相同的列

uajslkp6  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(565)

假设我们有下表:

|--------|-------------|------------|------------|------------|------------|
| tbl_id | tbl_item_id | tbl_data_a | tbl_data_b | tbl_data_c | tbl_data_d |
|--------|-------------|------------|------------|------------|------------|
|      1 |           1 |         a1 |         b1 |         c1 |         d1 |
|      2 |           1 |         a2 |         b2 |         c2 |         d2 |
|      3 |           1 |         a3 |         b3 |         c3 |         d3 |
|      4 |           2 |         a1 |         b1 |         c1 |         d1 |
|      5 |           2 |         a2 |         b2 |         c2 |         d2 |
|      6 |           3 |         a1 |         b1 |         c1 |         d1 |
|      7 |           4 |         a1 |         b1 |         c1 |         d1 |
|      8 |           4 |         a2 |         b2 |        c22 |         d2 |
|--------|-------------|------------|------------|------------|------------|

我们如何才能获得tbl\u item\u id,它具有所有提供行的所有正确列数据?
例如,我们在php中有以下数据数组:

$arData = [
  [a1, b1, c1, d1],
  [a2, b2, c2, d2]
];

对于这些数据,我们为每个tbl项目提供了以下信息:
有效:它为每一行提供了所有正确的数据组合(还有更多,但我们不介意)。
有效:它精确地拥有每个给定行的所有正确数据组合。
无效:它只有一个给定的组合。
无效:它具有所需的行数,但由于列tbl\u data\u c,第二个数据组合错误。
因此结果必须包含ids 1和ids 2。
谢谢大家。

ugmeyewa

ugmeyewa1#

请尝试以下操作:

SELECT tbl_item_id 
FROM your_table 
GROUP BY tbl_item_id 
HAVING 
  SUM(tbl_data_a = 'a1' AND tbl_data_b = 'b1' AND tbl_data_c = 'c1' AND tbl_data_d = 'd1') 
AND 
  SUM(tbl_data_a = 'a2' AND tbl_data_b = 'b2' AND tbl_data_c = 'c2' AND tbl_data_d = 'd2')
hs1rzwqc

hs1rzwqc2#

在mysql中,可以将查询构造为:

SELECT tbl_item_id 
FROM t 
WHERE (tbl_data_a, tbl_data_b, tbl_data_c, tbl_data_d) IN 
        ( ('a1', 'b1', 'c1', 'd1'), ('a2', 'b2', 'c2', 'd2') )
GROUP BY tbl_item_id 
HAVING COUNT(*) = 2;

这假设您的表没有重复项。

ngynwnxp

ngynwnxp3#

select yt1.tbl_item_id from your_table yt1
inner join your_table yt2 on yt1.tbl_item_id = yt2.tbl_item_id
where yt1.tbl_data_a = 'a1' and yt1.tbl_data_b = 'b1' and yt1.tbl_data_c = 'c1' and yt1.tbl_data_d = 'd1'
and yt2.tbl_data_a = 'a2' and yt2.tbl_data_b = 'b2' and yt2.tbl_data_c = 'c2' and yt2.tbl_data_d = 'd2'

相关问题