如何根据 table sql 中的列获取公共值

How to get common value based on a column from a table sql

我有一个table。屏幕截图如下:

有两列

  1. item_details_id
  2. pay_method_id

在item_details_id中有1,2,1条数据。另一方面pay_method_id有1,1,3个数据。

我只想获取 pay_method_id 的公共值,具体取决于 item_details_id。

根据给定的截图-

在 item_details_id 我有“1”和“2”值。

----- '1' pay_method_id 是 '1', '3'

----- '2' pay_method_id 是 '1'

所以我只有'1'数据是pay_method_id

的常见数据

如果我举个干净的例子

假设名为 laptop 的产品使用 Paypal 和 Skrill 付款方式。 另一个名为 desktop 的产品有 Skrill 支付方式..

那么如何获取名为 skrill 的通用支付方式?

如何获取值?我不明白我该如何解决这个问题。

任何帮助都会对我很有帮助。

您可以使用聚合:

select pay_method_id
from item_pays
where item_details_id in (1, 2)
group by pay_method_id
having count(distinct item_details_id) = 2;

returns pay_method_id item_details_id 12 的所有 pay_method_id,我就是这样解释你的问题的。

这将检查物品是否具有相同的报酬

CREATE TABLE item_pays (
  `item_details_id` INTEGER,
  `pay_method_id` INTEGER
);

INSERT INTO item_pays
  (`item_details_id`, `pay_method_id`)
VALUES
  ('1', '1'),
  ('2', '1'),
  ('1', '3');
SELECT `pay_method_id`
FROM item_pays
GROUP BY `pay_method_id`
HAVING COUNT(DISTINCT `item_details_id`) > 1
| pay_method_id |
| ------------: |
|             1 |
SELECT `pay_method_id`
,GROUP_CONCAT(DISTINCT `item_details_id`) items
FROM item_pays
GROUP BY `pay_method_id`
HAVING COUNT(DISTINCT `item_details_id`) > 1
pay_method_id | items
------------: | :----
            1 | 1,2  

db<>fiddle here

如果您想要 pay_method_id 具有所有可用的 item_details_id,您可以这样做:

select pay_method_id
from mytable
group by pay_method_id
having count(*) = (select count(distinct item_details_id) from mytable)

如果可能有重复的(pay_method_id, item_details_id),则使用:

having count(distinct item_details_id) = (select count(distinct item_details_id) from mytable)