それ自体を参照する2つの列を持つテーブルがあります。
select * from cgroups;
+----+--------------+-------------+-----------+----------+----------+
| id | title | description | cunixperm | cgroup_1 | cgroup_2 |
+----+--------------+-------------+-----------+----------+----------+
| 1 | admin | <null> | 32 | 1 | <null> |
| 2 | tag_mng | <null> | 32 | 1 | <null> |
| 3 | tags | <null> | 32 | 1 | <null> |
| 4 | exam_mng | <null> | 32 | 1 | <null> |
| 5 | exam_writer | <null> | 32 | 1 | <null> |
| 6 | exam_viewer | <null> | 32 | 1 | <null> |
| 7 | exam_starter | <null> | 32 | 1 | <null> |
+----+--------------+-------------+-----------+----------+----------+
ここにそのコードがあります:-
create table cgroups
(
id int unsigned primary key auto_increment,
title varchar(100) not null unique,
description varchar(255),
cunixperm tinyint unsigned not null default 32 ,# r=2 w=1
cgroup_1 int unsigned not null default 1 references cgroups (id) on delete cascade on update cascade,
cgroup_2 int unsigned references cgroups (id) on delete cascade on update cascade
);
cgroup_1列がc_groupの実際のタイトルに置き換えられたビューを作成したい
このようなもの:-http://sqlfiddle.com/#!9 / 7af382 / 1
select c.id, c.title, c.description, c.cunixperm, c1.title cgroup_1 from cgroups c , cgroups c1
where c.cgroup_1 = c1.id;
+----+--------------+-------------+-----------+----------+
| id | title | description | cunixperm | cgroup_1 |
+----+--------------+-------------+-----------+----------+
| 1 | admin | <null> | 32 | admin |
| 2 | tag_mng | <null> | 32 | admin |
| 3 | tags | <null> | 32 | admin |
| 4 | exam_mng | <null> | 32 | admin |
| 5 | exam_writer | <null> | 32 | admin |
| 6 | exam_viewer | <null> | 32 | admin |
| 7 | exam_starter | <null> | 32 | admin |
+----+--------------+-------------+-----------+----------+
このアプローチの問題は、2つ(他のいくつかのテーブルでは8つ)あるのに、1つの参照列でしか機能しないことです。
私がフォローしている場合、
select c.id, c.title, c.description, c.cunixperm, c1.title, c2.title
from cgroups c , cgroups c1, cgroups c2
where c.cgroup_1 = c1.id and c.cgroup_2 = c2.id;
行がゼロになります。http://sqlfiddle.com/#!9/7af382/4
あなたのフィドルを使うことはうまくいくようです。とにかく、明示的な結合構文を使用する必要があります。
select c.id, c.title, c.description, c.cunixperm, c1.title, c.cgroup_1
from cgroups c
INNER JOIN cgroups c1 ON c.cgroup_1 = c1.id;
http://sqlfiddle.com/#!9/7af382/3
そして2人で参加する
select c.id, c.title, c.description, c.cunixperm, c1.title, c.cgroup_1 , c2.title cgroup_2
from cgroups c
INNER JOIN cgroups c1 ON c.cgroup_1 = c1.id
INNER JOIN cgroups c2 ON c.cgroup_2 = c2.id
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加