我有以下的数据库,不要检索,我的问题是,我想查询所有list_id
在其对应的list_risk_code
my_list
表是'600'
及其info_risk_code
都'400'
如果提供的类别的所有或一个现有
table: my_info_list
info_id list_id
1 1
2 1
3 1
4 2
5 2
6 3
7 3
table: my_info
info_id info_risk_code
1 '400'
2 '600'
3 '400'
4 '600'
5 '600'
6 '400'
7 '400'
table: my_list
list_id list_risk_code
1 '600'
2 '600'
3 '600'
我的期望低于输出,因为,list_id
1具有3 info_risk_code
(400600和400),但它们中的一个是600,从而它不会被包括在内。该list_id
2具有2 info_risk_code
(600600),但两者都是600因此它也被忽略。只有list_id
3是检索,因为它有2 info_risk_code
这两者都是400:
my_list.list_id info_risk_code list_risk_code
3 '600' '400'
现在我的代码如下它得到1和3它们都含有非600 info_risk_code。这是不正确的:
SELECT DISTINCT
ml.list_id
,info_risk_code as c_rr
,list_risk_code as a_rr
FROM
my_list AS ml
INNER JOIN my_info_list AS mil ON mil.list_id = ml.list_id
INNER JOIN my_info AS mi ON mil.info_id = mi.info_id
WHERE
(
(info_risk_code = '600' OR info_risk_code = '360')
AND (NOT list_risk_code = '600' AND NOT list_risk_code = '360')
)
OR
(
(NOT info_risk_code = '600' AND NOT info_risk_code = '360')
AND (list_risk_code = '600' OR list_risk_code = '360')
)
您试用/引用您可以使用此:
CREATE TABLE my_info_list(
info_id INT,
list_id INT
);
CREATE TABLE my_info(
info_id INT,
info_risk_code varchar(5)
);
CREATE TABLE my_list(
list_id INT,
list_risk_code varchar(5)
);
INSERT INTO my_info_list VALUES (1,1);
INSERT INTO my_info_list VALUES (2,1);
INSERT INTO my_info_list VALUES (3,1);
INSERT INTO my_info_list VALUES (4,2);
INSERT INTO my_info_list VALUES (5,2);
INSERT INTO my_info_list VALUES (6,3);
INSERT INTO my_info_list VALUES (7,3);
INSERT INTO my_info VALUES (1,'400');
INSERT INTO my_info VALUES (2,'600');
INSERT INTO my_info VALUES (3,'400');
INSERT INTO my_info VALUES (4,'600');
INSERT INTO my_info VALUES (5,'600');
INSERT INTO my_info VALUES (6,'400');
INSERT INTO my_info VALUES (7,'400');
INSERT INTO my_list VALUES (1,'600');
INSERT INTO my_list VALUES (2,'600');
INSERT INTO my_list VALUES (3,'600');
与此查询的编码,现在将近一个小时,需要一些想法。谢谢
我认为有在第一表中提供的样品数据中的错误:字段'list_id'和'info_id'应被切换。 –
@GiorgosBetsos是的,对不起:)你有良好的用眼 – Ceeee