我在MySQL数据库中有一堆X. 有些X不会在一起,我想要一个包含所有X对的表和一个表示它们是否正常的布尔值.
这部分很简单:
CREATE TABLE good_x (
X_id_1 int(10) not null ,
X_id_2 int(10) not null ,
is_good tinyint(1)
) ;
Run Code Online (Sandbox Code Playgroud)
我的问题是:鉴于Xsub1和Xsub3在一起.
SELECT is_good from good_x where X_id_1 = "Xsub1" and X_id_2 = "Xsub3" ;
Run Code Online (Sandbox Code Playgroud)
但是,如果数据来自Xsub3,Xsub1怎么办?我可以在表格中有两个条目:
Xsub1,Xsub3,1
Xsub3,Xsub1,1
Run Code Online (Sandbox Code Playgroud)
但是,你必须跟踪两件事.在我的情况下,这是一个受控制的词汇表,所以我不期望有太大的变化.但是如果我想添加第三个X,Xsub5,那么你就会得到六个条目.
Xsub1,Xsub3,Xsub5,1
Xsub1,Xsub5,Xsub3,1
Xsub3,Xsub1,Xsub5,1
Xsub3,Xsub5,Xsub1,1
Xsub5,Xsub1,Xsub3,1
Xsub5,Xsub3,Xsub1,1
Run Code Online (Sandbox Code Playgroud)
这很难维护.
有没有办法可以投入一堆X,两个或更多,并将其与布尔值相关联,所以我不必为双打,三元组,四元组,四元组等单独的表.这是否可以在任何SQL,如果是这样,语法是什么?
将每个有效分组存储在如下表中:
CREATE TABLE good_x (x_id CHAR, group_id INT);
Run Code Online (Sandbox Code Playgroud)
用这样的分组播种它:
INSERT INTO good_x(x_id,group_id) values ('Xsub3',1);
INSERT INTO good_x(x_id,group_id) values ('Xsub1',1);
Run Code Online (Sandbox Code Playgroud)
对于3:
INSERT INTO good_x(x_id,group_id) values ('Xsub3',2);
INSERT INTO good_x(x_id,group_id) values ('Xsub1',2);
INSERT INTO good_x(x_id,group_id) values ('Xsub5',2);
Run Code Online (Sandbox Code Playgroud)
现在像这样运行SELECT:
SELECT 1
FROM good_x
WHERE x_id IN ([your list of values])
GROUP BY group_id
HAVING count(1) = n;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |