使用派生 table 中的列时遇到问题
Trouble using a column from a derived table
SQL 菜鸟,我似乎无法弄清楚我在尝试使用派生 table 时做错了什么。
测试表:
Controller
+---------+--------+------+
| termID | Net | Type |
+---------+--------+------+
| T901 | F001 | P |
+---------+--------+------+
| T902 | F001 | A |
+---------+--------+------+
Privilege
+---------+--------+
| termID | Net |
+---------+--------+
| T903 | F001 |
+---------+--------+
Terminal
+---------+------+
| termID | Act |
+---------+------+
| T901 | Y |
| T902 | Y |
| T903 | Y |
+---------+------+
这似乎有效 -->
SELECT *
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
给予:
+---------+--------+------+
| termID | termID | Act |
+---------+--------+------+
| T901 | T901 | Y |
| T902 | T902 | Y |
| T903 | T903 | Y |
+---------+--------+------+
这似乎可行 -->
SELECT att1.termid
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
给予:
+---------+
| termID |
+---------+
| T901 |
| T902 |
| T903 |
+---------+
但是,这个 returns:“'field list' 中的未知列 'att1.Act' -->
SELECT att1.Act
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
因为其他人 "worked" 因为他们说的是专栏,所以我不明白为什么它看不到这个特定的专栏。
我需要做什么才能访问派生的 table 的列?
如果有人有心情告诉我应该如何处理这个问题,我最终会尝试确定 Controller 或 Privilege table 中的所有终端是否全部处于活动状态或全部不处于活动状态在终端 table。这是我的第一次尝试(但在上面的代码子集中失败)。
SELECT COUNT(*)
FROM (
SELECT DISTINCT att1.Act
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid
) att2;
你坏了SQL:
SELECT att1.Act
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
已损坏,因为列 Act 未在 table att1 上定义。
尝试使用
开始查询
SELECT att1.termId, terminal.act
看看这是否更适合您。
SQL 菜鸟,我似乎无法弄清楚我在尝试使用派生 table 时做错了什么。
测试表:
Controller
+---------+--------+------+
| termID | Net | Type |
+---------+--------+------+
| T901 | F001 | P |
+---------+--------+------+
| T902 | F001 | A |
+---------+--------+------+
Privilege
+---------+--------+
| termID | Net |
+---------+--------+
| T903 | F001 |
+---------+--------+
Terminal
+---------+------+
| termID | Act |
+---------+------+
| T901 | Y |
| T902 | Y |
| T903 | Y |
+---------+------+
这似乎有效 -->
SELECT *
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
给予:
+---------+--------+------+
| termID | termID | Act |
+---------+--------+------+
| T901 | T901 | Y |
| T902 | T902 | Y |
| T903 | T903 | Y |
+---------+--------+------+
这似乎可行 -->
SELECT att1.termid
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
给予:
+---------+
| termID |
+---------+
| T901 |
| T902 |
| T903 |
+---------+
但是,这个 returns:“'field list' 中的未知列 'att1.Act' -->
SELECT att1.Act
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
因为其他人 "worked" 因为他们说的是专栏,所以我不明白为什么它看不到这个特定的专栏。
我需要做什么才能访问派生的 table 的列?
如果有人有心情告诉我应该如何处理这个问题,我最终会尝试确定 Controller 或 Privilege table 中的所有终端是否全部处于活动状态或全部不处于活动状态在终端 table。这是我的第一次尝试(但在上面的代码子集中失败)。
SELECT COUNT(*)
FROM (
SELECT DISTINCT att1.Act
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid
) att2;
你坏了SQL:
SELECT att1.Act
FROM (
SELECT termid from controller where net="F001"
UNION
SELECT termid from privilege where net="F001"
) att1
JOIN terminal
ON att1.termid=terminal.termid;
已损坏,因为列 Act 未在 table att1 上定义。
尝试使用
开始查询SELECT att1.termId, terminal.act
看看这是否更适合您。