gpt4 book ai didi

php - 选择链接表中缺少的行

转载 作者:可可西里 更新时间:2023-11-01 07:33:14 24 4
gpt4 key购买 nike

我有 3 个表。一个是服务表。每个服务都可以有一些选项,这些选项在选项表中。第三个表是链接到每个选项的联系人列表。

所以,表格看起来像这样:

服务

serviceID
100
101

选项

optionID    serviceID    price
1 100 10.5
2 100 100
3 101 25.25
4 101 67.90

联系选项

contactID     optionID     serviceID     priceOverride
10 1 100 NULL
10 2 100 NULL
10 3 101 30
10 4 101 100
11 1 100 12
11 3 101 NULL
12 2 100 55
12 3 101 NULL
12 4 101 NULL
13 1 100 NULL
13 2 100 66
13 4 101 NULL

如您所见,contactID 10 将所有 4 个选项都链接到他。 11 只有 2 个链接到她,12 和 13 都只有 3 个。

我正在尝试找到一种方法来获取没有所有 4 个选项的 contactID,以及它们缺少哪些选项。

我试过了(SQL Fiddle:http://sqlfiddle.com/#!2/ca937/7):

SELECT *
FROM contactOptions
LEFT JOIN options
ON options.optionID = contactOptions.optionID
AND options.serviceID = contactOptions.serviceID

但这只会返回所有 12 行,我想要相反的行,不存在的行。

如何返回没有所有 4 个选项的联系人,以及他们没有的选项?

返回的行应该是:

contactID    optionID    serviceID
11 2 100
11 4 101
12 1 100
13 3 101

我最终想找出哪些服务(以及它的哪些选项)没有链接到它们的联系人。

编辑:我已经越来越近了,这就是我现在拥有的

SELECT contactID,
contactOptions.serviceID,contactOptions.optionID AS x,
options.optionID AS y
FROM contactOptions
JOIN options
ON options.serviceID = contactOptions.serviceID
HAVING x != y

这是我当前的 SQL Fiddle:http://sqlfiddle.com/#!2/ca937/35

返回:

CONTACTID    SERVICEID    X    Y
10 100 1 2
10 100 2 1
10 101 3 4
10 101 4 3
11 100 1 2
11 101 3 4
12 100 2 1
12 101 3 4
12 101 4 3
13 100 1 2
13 100 2 1
13 101 4 3

这包含我想要的行,但也包含我不需要的行。根据这个结果,我基本上需要删除联系人具有相同 X 和 Y 值的所有行,然后剩下的行是正确的。

编辑 2:我现在更接近了(http://sqlfiddle.com/#!2/ca937/53):

SELECT contactID,
contactOptions.serviceID,contactOptions.optionID AS x,
options.optionID AS y
FROM contactOptions
JOIN options
ON options.serviceID = contactOptions.serviceID
GROUP BY contactID,serviceID
HAVING x != y

这给了我:

CONTACTID    SERVICEID    X    Y
12 100 2 1
13 101 4 3

现在我有 2 行我想要。我只需要弄清楚如何获取 11 的行。

最佳答案

SELECT contacts_options_full.contactID, contacts_options_full.optionID, options.serviceID
FROM
(
SELECT contactID, optionID
FROM (SELECT optionID FROM options) o
CROSS JOIN
(SELECT DISTINCT contactID FROM contactOptions) co
) contacts_options_full
LEFT JOIN contactOptions ON contacts_options_full.contactID = contactOptions.contactID
AND contactOptions.optionID = contacts_options_full.optionID
JOIN options ON contacts_options_full.optionID = options.optionID
WHERE contactOptions.serviceID IS NULL
ORDER BY contacts_options_full.contactID, contacts_options_full.optionID

关于 sqlfiddle

关于php - 选择链接表中缺少的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077522/

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