sql链接

nzkunb0c  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(221)

编辑:问题是数据不匹配表a\U b和b\U c中的b-ID没有重叠
我有以下表格:
a(id,…)
a\u b(a\u id,b\u id)
b\u c(b\u id,c\u id)
c\ d(c\ id,d\ id)
d(id,值,…)
在这里,我希望根据d中的行的值从a中得到一些行。表a\u b、b\u c和c\u d只是从一个表到另一个表的idMap。
我试着找到这样的东西:

select * from A where D.value = "true"

我走了这么远:

select * from A 
inner join A_B on A_B.a_id = A.id
inner join B_C on B_C.b_id = A_B.b_id

只是一张空table。
我开始认为我处理这个问题的方式是错误的,或者可能误解了应该如何加入表格。

des4xlb0

des4xlb01#

如果你的数据是一致的,你所得到的就可以了。下面是数据库和查询的一个版本,它演示了这一点。为了简单起见,我推断了表的存在 b 以及 c ,并在 X_Y 将表样式设置为单字表的外键。

CREATE TABLE a
(
    id      INTEGER NOT NULL PRIMARY KEY,
    info    VARCHAR(20) NOT NULL
);
CREATE TABLE b
(
    id      INTEGER NOT NULL PRIMARY KEY,
    data    VARCHAR(20) NOT NULL
);
CREATE TABLE C
(
    id      INTEGER NOT NULL PRIMARY KEY,
    extra   VARCHAR(20) NOT NULL
);
CREATE TABLE d
(
    id      INTEGER NOT NULL PRIMARY KEY,
    value   VARCHAR(20) NOT NULL
);
CREATE TABLE a_b
(
    a_id    INTEGER NOT NULL REFERENCES a,
    b_id    INTEGER NOT NULL REFERENCES b,
    PRIMARY KEY (a_id, b_id)
);
CREATE TABLE b_c
(
    b_id    INTEGER NOT NULL REFERENCES b,
    c_id    INTEGER NOT NULL REFERENCES C,
    PRIMARY KEY(b_id, c_id)
);
CREATE TABLE c_d
(
    c_id    INTEGER NOT NULL REFERENCES C,
    d_id    INTEGER NOT NULL REFERENCES d,
    PRIMARY KEY(c_id, d_id)
);
INSERT INTO a VALUES(1, "Quasimodo");
INSERT INTO b VALUES(20, "Quiet");
INSERT INTO C VALUES(333, "Contemporaneous");
INSERT INTO d VALUES(4444, "true");

INSERT INTO a_b VALUES(1, 20);
INSERT INTO b_c VALUES(20, 333);
INSERT INTO c_d VALUES(333, 4444);
SELECT *
  FROM a
  JOIN a_b ON a_b.a_id = a.id
  JOIN b_c ON b_c.b_id = a_b.b_id
  JOIN c_d ON c_d.c_id = b_c.c_id
  JOIN d   ON d.id     = c_d.d_id
 WHERE d.value = "true";

对于给定的数据,产生:

1      Quasimodo     1      20     20     333    333    4444   4444   true

因此,如果数据是正确的,那么您正在构建的查询可以产生一个答案。但是,如果在不完整的查询中得到一个空表,那么表中就有数据问题,或者(很可能)大纲模式误导了我们。
在运行macos high sierra 10.13.4的mac上执行的测试,使用informix 12.10.fc6,但使用informix和mysql共同的sql子集。

相关问题