似乎“NATURAL JOIN”语法在我的PHP5.3环境中不能很好地工作。 我使用PDO访问SQLite3引擎。
请参阅下面的示例,我希望为用户存储各种访问权限:
CREATE TABLE user (
id_u integer PRIMARY KEY,
name text);
CREATE TABLE access (
id_a integer PRIMARY KEY,
id_u integer,
area text,
granted text,
FOREIGN KEY(id_u) REFERENCES user(id_u));
经过一些修改后,表格中包含以下内容:
id_u name
---- ------
1 Igor
2 Rebecca
id_a id_u area granted
---- ---- ------- -------
1 1 kitchen full
2 2 kitchen restricted
3 1 lab forbidden
现在,如果我执行此查询:
SELECT granted FROM user U
INNER JOIN access A USING (id_u)
WHERE U.name='Igor' and A.area='kitchen';
我得到了预期的结果( full
)
但是,这个查询:
SELECT granted FROM user U
NATURAL INNER JOIN access A
WHERE U.name='Igor' and A.area='kitchen';
没有结果。
第二个查询有问题,或PDO和/或SQLite3在这里表现得好笑吗?
编辑:根据要求,我添加了SQLfiddle来演示问题
它在SQLite的两个变体下工作,但它在我自己的环境中失败了。具体的PDO界面,SQLite版本或我发送请求的方式是否有问题,我不知道。这是一点点帮助的地方。
答案 0 :(得分:1)
尝试使用MySql(因为它的关键字必须使用rright):
CREATE TABLE user (
id_u integer PRIMARY KEY,
name varchar(255) UNIQUE NOT NULL);
CREATE TABLE access (
id_a integer,
id_u integer,
area varchar(55),
rright varchar(55),
primary key(id_a),
foreign key(id_u) references user(id_u)
);
这与标准SQL中的第二个查询相同:
select rright
from user u, access a
where u.id_u=a.id_u and u.name='Igor' and a.area='kitchen';
结果是:
+--------+
| rright |
+--------+
| full |
+--------+
1 row in set (0.00 sec)