【发布时间】:2015-07-05 02:18:55
【问题描述】:
跟进SELECTing the contents of the Table, which is a result of another value,我想在生成的字段上保留一个条件。如果我执行这个查询:
SELECT *, (
SELECT `TableName` FROM `TableNames` WHERE `TableID`=`IndexType`
) AS `IndexTypeName`,
CASE WHEN `IndexType`=1 THEN (
SELECT `Username` FROM `Users` WHERE `IndexRowID`=`UserID`
) WHEN `IndexType`=2 THEN (
SELECT `MessageContent` FROM `Messages` WHERE `IndexRowID`=`MessageID`
) WHEN `IndexType`=3 THEN (
SELECT `CommentContent` FROM `Comments` WHERE `IndexRowID`=`CommentID`
)
END `TableValue`
FROM `Index`
ORDER BY `IndexTime` DESC;
我显然会得到:
+---------+-----------+------------+---------------------+------------+---------------------+
| IndexID | IndexType | IndexRowID | IndexTime | IndexTable | TableValue |
+---------+-----------+------------+---------------------+------------+---------------------+
| 5 | 2 | 2 | 2015-04-10 11:45:00 | Messages | Hello, Mr. Prave... |
+---------+-----------+------------+---------------------+------------+---------------------+
| 4 | 3 | 1 | 2015-04-10 11:30:00 | Comments | @You, you aren't... |
+---------+-----------+------------+---------------------+------------+---------------------+
| 3 | 2 | 1 | 2015-04-10 11:25:00 | Messages | Thanks for your ... |
+---------+-----------+------------+---------------------+------------+---------------------+
| 2 | 1 | 2 | 2015-04-10 10:55:00 | Users | Jeff Atwood |
+---------+-----------+------------+---------------------+------------+---------------------+
| 1 | 1 | 1 | 2015-04-10 10:50:00 | Users | Praveen Kumar |
+---------+-----------+------------+---------------------+------------+---------------------+
但是,如果我想过滤 TableValue 的值,那么如果我给出如下查询:
SELECT *, (
SELECT `TableName` FROM `TableNames` WHERE `TableID`=`IndexType`
) AS `IndexTypeName`,
CASE WHEN `IndexType`=1 THEN (
SELECT `Username` FROM `Users` WHERE `IndexRowID`=`UserID`
) WHEN `IndexType`=2 THEN (
SELECT `MessageContent` FROM `Messages` WHERE `IndexRowID`=`MessageID`
) WHEN `IndexType`=3 THEN (
SELECT `CommentContent` FROM `Comments` WHERE `IndexRowID`=`CommentID`
)
END `TableValue`
FROM `Index`
WHERE `TableValue` LIKE '%prav%'
ORDER BY `IndexTime` DESC;
我收到以下错误:
查询中的错误 (1054):“where 子句”中的未知列“TableValue”。
我不想对子 SELECT 查询中的每个案例都使用过滤器。 不执行以下操作是否还有其他方法:
- 在每个 Sub-
SELECT语句中使用WHERE。 - 为整个事物创建一个视图。
提前致谢。
【问题讨论】:
-
在 MySQL 中的 where 子句中使用列别名是非法的。请参考:stackoverflow.com/questions/200200/…
标签: mysql sql join subquery where