PHP / PDO / SQLite3中的NATURAL JOIN问题

时间:2013-12-28 01:28:24

标签: php sqlite

似乎“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版本或我发送请求的方式是否有问题,我不知道。这是一点点帮助的地方。

1 个答案:

答案 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)