使用派生 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

看看这是否更适合您。