【问题标题】:MySQL Union Select with DIfferent Columns Issue具有不同列问题的 MySQL Union Select
【发布时间】:2020-02-05 05:51:19
【问题描述】:

我已经从高到低搜索了这个问题,我确信我的查询是有效的。但是,我不断收到错误消息。请帮忙!

我有两张桌子。第一个是住宅物业。它有 4 个列,而第二个表没有...我对每个缺失的列都使用了 NULL AS '...'。

SELECT `L_ListingID`, `LA1_AgentID`, `L_Class`, `L_Class_`, `L_Address`, `L_City`, `L_State`, `L_Zip`, `L_AskingPrice`, `L_InputDate`, `L_Status`, `LM_Int1_1`, `LM_Int4_12`, `LM_Char10_12`, `LM_Char10_13`, `LM_Char10_14`, `LM_Char10_15` 
FROM `properties_residential` 
WHERE 1 AND ( LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
UNION 
SELECT `L_ListingID`, `LA1_AgentID`, `L_Class`, `L_Class_`, `L_Address`, `L_City`, `L_State`, `L_Zip`, `L_AskingPrice`, `L_InputDate`, `L_Status`, NULL AS `LM_Int1_1`, NULL AS `LM_Int4_12`, NULL AS `LM_Char10_12`, NULL AS `LM_Char10_13`, NULL AS `LM_Char10_14`, NULL AS `LM_Char10_15` 
FROM `properties_commercial` 
WHERE 1 AND ( LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
ORDER BY `L_InputDate` 
DESC LIMIT 6

而错误是……

1054 - “where 子句”中的未知列“LM_Char10_12”

请给我指出正确的方向。我非常感谢任何帮助。

【问题讨论】:

  • 您可以将所有这些简化为一个更简单的查询以用于演示目的。
  • 不能在 WHERE 子句中使用列的别名。在您的情况下,您不需要它。

标签: mysql select union


【解决方案1】:

在您的查询中,您在 WHERE 子句中使用列别名,这在 MYSQL 中是非法的。

标准 SQL 不允许在 WHERE 子句中引用列别名。 施加此限制是因为当 WHERE 子句 评估,列值可能尚未确定。为了 例如,以下查询是非法的:

> SELECT id, COUNT(*) AS cnt FROM tbl_name   WHERE cnt > 0 GROUP BY id;

以上内容取自 MYSQL 文档: MySQL docs

更正您的查询:

SELECT `L_ListingID`, `LA1_AgentID`, `L_Class`, `L_Class_`, `L_Address`, `L_City`, `L_State`, `L_Zip`, `L_AskingPrice`, `L_InputDate`, `L_Status`, `LM_Int1_1`, `LM_Int4_12`, `LM_Char10_12`, `LM_Char10_13`, `LM_Char10_14`, `LM_Char10_15` 
FROM `properties_residential` 
WHERE 1 AND ( LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
UNION 
SELECT `L_ListingID`
, `LA1_AgentID`
, `L_Class`
, `L_Class_`
, `L_Address`
, `L_City`
, `L_State`
, `L_Zip`
, `L_AskingPrice`
, `L_InputDate`
, `L_Status`
, NULL AS `LM_Int1_1`
, NULL AS `LM_Int4_12`
, NULL AS `LM_Char10_12`
, NULL AS `LM_Char10_13`
, NULL AS `LM_Char10_14`
, NULL AS `LM_Char10_15` 
FROM `properties_commercial` 
WHERE 1 AND 
( 
LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' 
OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' 
OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
ORDER BY `L_InputDate` 
DESC LIMIT 6

在上面的查询中,注释部分不是必需的,因为列本身是 NULL。 因此,您可以从 WHERE 子句中删除注释部分以使您的查询正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多