php - PHP/PDO/SQLite3 中的 NATURAL JOIN 问题

标签 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';

我得到了预期的结果(完整)

但是,这个查询:

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/

相关文章:

c++ - 在 Qt 中使用 SQLite

ruby-on-rails - Devise::RegistrationsController#create 中的 ActiveRecord::StatementInvalid

PHP MYSQL 在数据库 0.01 中保存 float ?

php - 如何在不再次查询的情况下从 mysql 数组中检索前 2 个结果?

php - 传递要由外部 .js 文件写入的复杂 PHP 变量

php - Laravel - 获取记录集合,如果不存在于另一个表中

sqlite - 在 Electron 表格中显示db文件数据

SQLite:增加唯一整数字段

mysql - Sqlite 查询选择语句,其排序结果尊重 OFFSET

php - 如何使用 PDO 准备好的语句使搜索表单适用于多个字段