看来“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';
我得到了预期的结果(完整
)
但是,这个查询:
SELECT granted FROM user U
NATURAL INNER JOIN access A
WHERE U.name='Igor' and A.area='kitchen';
没有结果。
第二个查询有问题吗?或者 PDO 和/或 SQLite3 在这里表现得很有趣吗?
编辑:根据要求,我添加了 SQLfiddle演示问题
它可以在 SQLite 的两个变体下运行,但在我自己的环境中却失败了。是否特定的 PDO 接口(interface)、SQLite 版本或我发送请求的方式有问题,我不知道。如果您能提供一些帮助,我们将不胜感激。
最佳答案
用 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)
关于php - PHP/PDO/SQLite3 中的 NATURAL JOIN 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20810042/