“on子句”中的未知列是否有JOIN错误?

时间:2015-08-07 14:26:15

标签: php mysql join

我在这里有这样的查询,我从我们的售票数据库中提取事件的数据......如果我删除这些行,它会很有效:

**IF (wp_sshow_verifys.verifyID IS NULL,TRUE,FALSE) wp_sshow_verifys**
FROM wp_sshow_sales, wp_sshow_tickets
**INNER JOIN wp_sshow_verifys ON wp_sshow_verifys.saleID=wp_sshow_sales.saleID**

这里的目标是从所有较低的live15表中提取所有数据,并且如果wp_sshow_verifys.saleID表中存在wp_sshow_sales.saleID,则仅从wp_sshow_sales + wp_sshow_tickets中提取数据。

我收到此错误:#1054 - 'on clause'中的未知列'wp_sshow_sales.saleID'

我已经尝试了几乎所有我能想到的东西,并且看了一遍并没有让我感到困惑的答案,但在这里我正在寻求帮助。我在调用两个表时有什么问题吗?

SELECT 
wp_sshow_sales.saleFirstName as first,
wp_sshow_sales.saleLastName as last,
wp_sshow_sales.saleEMail as email,
wp_sshow_sales.salePPStreet as street,
wp_sshow_sales.salePPCity as city,
wp_sshow_sales.salePPState as state,
wp_sshow_sales.salePPZip as zip,
(CASE WHEN wp_sshow_tickets.priceID = 1 THEN 'Cerro Gordo' WHEN wp_sshow_tickets.priceID = 2 THEN 'Franklin' WHEN wp_sshow_tickets.priceID = 3 THEN 'Butler' WHEN wp_sshow_tickets.priceID = 4 THEN 'Hardin' WHEN wp_sshow_tickets.priceID = 5 THEN 'Floyd' WHEN wp_sshow_tickets.priceID = 6 THEN 'Mitchell' WHEN wp_sshow_tickets.priceID = 7 THEN 'Hancock' WHEN wp_sshow_tickets.priceID = 8 THEN 'Worth' WHEN wp_sshow_tickets.priceID = 9 THEN 'Wright' WHEN wp_sshow_tickets.priceID = 12 THEN 'Dickinson' WHEN wp_sshow_tickets.priceID = 13 THEN 'Howard' WHEN wp_sshow_tickets.priceID = 14 THEN 'Palo Alto' WHEN wp_sshow_tickets.priceID = 15 THEN 'Calhoun' WHEN wp_sshow_tickets.priceID = 16 THEN 'Woodbury' WHEN wp_sshow_tickets.priceID = 17 THEN 'Emmet' WHEN wp_sshow_tickets.priceID = 18 THEN 'Kossuth' WHEN wp_sshow_tickets.priceID = 19 THEN 'Winnebago' WHEN wp_sshow_tickets.priceID = 22 THEN 'Boone' WHEN wp_sshow_tickets.priceID = 23 THEN 'Buena Vista' WHEN wp_sshow_tickets.priceID = 24 THEN 'OBrien' WHEN wp_sshow_tickets.priceID = 25 THEN 'Osceola' WHEN wp_sshow_tickets.priceID = 26 THEN 'Pocahontas' WHEN wp_sshow_tickets.priceID = 27 THEN 'No County' ELSE 'Error No ID' END) AS 'County',
wp_sshow_tickets.ticketQty as qty,
IF (wp_sshow_verifys.verifyID IS NULL,TRUE,FALSE) wp_sshow_verifys
FROM wp_sshow_sales, wp_sshow_tickets
INNER JOIN wp_sshow_verifys ON wp_sshow_verifys.saleID=wp_sshow_sales.saleID
WHERE wp_sshow_sales.saleID = wp_sshow_tickets.saleID

UNION ALL
SELECT
live_15.firstname as first,
live_15.lastname as last,
live_15.email as email,
live_15.street as street,
live_15.city as city,
live_15.state as state,
live_15.zip as zip,
(CASE WHEN live_15.ticketTYPE = 1 THEN 'Cerro Gordo' WHEN live_15.ticketTYPE = 2 THEN 'Franklin' WHEN live_15.ticketTYPE = 3 THEN 'Butler' WHEN live_15.ticketTYPE = 4 THEN 'Hardin' WHEN live_15.ticketTYPE = 5 THEN 'Floyd' WHEN live_15.ticketTYPE = 6 THEN 'Mitchell' WHEN live_15.ticketTYPE = 7 THEN 'Hancock' WHEN live_15.ticketTYPE = 8 THEN 'Worth' WHEN live_15.ticketTYPE = 9 THEN 'Wright' WHEN live_15.ticketTYPE = 12 THEN 'Dickinson' WHEN live_15.ticketTYPE = 13 THEN 'Howard' WHEN live_15.ticketTYPE = 14 THEN 'Palo Alto' WHEN live_15.ticketTYPE = 15 THEN 'Calhoun' WHEN live_15.ticketTYPE = 16 THEN 'Woodbury' WHEN live_15.ticketTYPE = 17 THEN 'Emmet' WHEN live_15.ticketTYPE = 18 THEN 'Kossuth' WHEN live_15.ticketTYPE = 19 THEN 'Winnebago' WHEN live_15.ticketTYPE = 22 THEN 'Boone' WHEN live_15.ticketTYPE = 23 THEN 'Buena Vista' WHEN live_15.ticketTYPE = 24 THEN 'OBrien' WHEN live_15.ticketTYPE = 25 THEN 'Osceola' WHEN live_15.ticketTYPE = 26 THEN 'Pocahontas' WHEN live_15.ticketTYPE = 27 THEN 'No County' ELSE 'Error No ID' END) AS 'County',
live_15.qty as qty
FROM live_15

修复之前的混音后,我现在得到:#1222 - 使用的SELECT语句具有不同的列数

SELECT 
wp_sshow_sales.saleFirstName as first,
wp_sshow_sales.saleLastName as last,
wp_sshow_sales.saleEMail as email,
wp_sshow_sales.salePPStreet as street,
wp_sshow_sales.salePPCity as city,
wp_sshow_sales.salePPState as state,
wp_sshow_sales.salePPZip as zip,
(CASE WHEN wp_sshow_tickets.priceID = 1 THEN 'Cerro Gordo' WHEN wp_sshow_tickets.priceID = 2 THEN 'Franklin' WHEN wp_sshow_tickets.priceID = 3 THEN 'Butler' WHEN wp_sshow_tickets.priceID = 4 THEN 'Hardin' WHEN wp_sshow_tickets.priceID = 5 THEN 'Floyd' WHEN wp_sshow_tickets.priceID = 6 THEN 'Mitchell' WHEN wp_sshow_tickets.priceID = 7 THEN 'Hancock' WHEN wp_sshow_tickets.priceID = 8 THEN 'Worth' WHEN wp_sshow_tickets.priceID = 9 THEN 'Wright' WHEN wp_sshow_tickets.priceID = 12 THEN 'Dickinson' WHEN wp_sshow_tickets.priceID = 13 THEN 'Howard' WHEN wp_sshow_tickets.priceID = 14 THEN 'Palo Alto' WHEN wp_sshow_tickets.priceID = 15 THEN 'Calhoun' WHEN wp_sshow_tickets.priceID = 16 THEN 'Woodbury' WHEN wp_sshow_tickets.priceID = 17 THEN 'Emmet' WHEN wp_sshow_tickets.priceID = 18 THEN 'Kossuth' WHEN wp_sshow_tickets.priceID = 19 THEN 'Winnebago' WHEN wp_sshow_tickets.priceID = 22 THEN 'Boone' WHEN wp_sshow_tickets.priceID = 23 THEN 'Buena Vista' WHEN wp_sshow_tickets.priceID = 24 THEN 'OBrien' WHEN wp_sshow_tickets.priceID = 25 THEN 'Osceola' WHEN wp_sshow_tickets.priceID = 26 THEN 'Pocahontas' WHEN wp_sshow_tickets.priceID = 27 THEN 'No County' ELSE 'Error No ID' END) AS 'County',
wp_sshow_tickets.ticketQty as qty,
IF (wp_sshow_verifys.verifyID IS NULL,TRUE,FALSE) verify
FROM wp_sshow_sales
INNER JOIN wp_sshow_tickets
  ON wp_sshow_sales.saleID = wp_sshow_tickets.saleID
INNER JOIN wp_sshow_verifys 
  ON wp_sshow_verifys.saleID=wp_sshow_sales.saleID

UNION ALL
SELECT
live_15.firstname as first,
live_15.lastname as last,
live_15.email as email,
live_15.street as street,
live_15.city as city,
live_15.state as state,
live_15.zip as zip,
(CASE WHEN live_15.ticketTYPE = 1 THEN 'Cerro Gordo' WHEN live_15.ticketTYPE = 2 THEN 'Franklin' WHEN live_15.ticketTYPE = 3 THEN 'Butler' WHEN live_15.ticketTYPE = 4 THEN 'Hardin' WHEN live_15.ticketTYPE = 5 THEN 'Floyd' WHEN live_15.ticketTYPE = 6 THEN 'Mitchell' WHEN live_15.ticketTYPE = 7 THEN 'Hancock' WHEN live_15.ticketTYPE = 8 THEN 'Worth' WHEN live_15.ticketTYPE = 9 THEN 'Wright' WHEN live_15.ticketTYPE = 12 THEN 'Dickinson' WHEN live_15.ticketTYPE = 13 THEN 'Howard' WHEN live_15.ticketTYPE = 14 THEN 'Palo Alto' WHEN live_15.ticketTYPE = 15 THEN 'Calhoun' WHEN live_15.ticketTYPE = 16 THEN 'Woodbury' WHEN live_15.ticketTYPE = 17 THEN 'Emmet' WHEN live_15.ticketTYPE = 18 THEN 'Kossuth' WHEN live_15.ticketTYPE = 19 THEN 'Winnebago' WHEN live_15.ticketTYPE = 22 THEN 'Boone' WHEN live_15.ticketTYPE = 23 THEN 'Buena Vista' WHEN live_15.ticketTYPE = 24 THEN 'OBrien' WHEN live_15.ticketTYPE = 25 THEN 'Osceola' WHEN live_15.ticketTYPE = 26 THEN 'Pocahontas' WHEN live_15.ticketTYPE = 27 THEN 'No County' ELSE 'Error No ID' END) AS 'County',
live_15.qty as qty
FROM live_15

让计数列: 首先选择:第一个,最后一个,电子邮件,街道,城市,州,邮编,priceID,数量,验证 第二个选择:第一个,最后一个,电子邮件,街道,城市,州,邮编,priceID,数量

我的......我有一个名为verify的新专栏,它很难看,我不想要它。

1 个答案:

答案 0 :(得分:1)

不要混合连接符号。 摆脱where子句并用内连接替换,并将where移动到on子句

SELECT 
    wp_sshow_sales.saleFirstName as first,
    wp_sshow_sales.saleLastName as last,
    wp_sshow_sales.saleEMail as email,
    wp_sshow_sales.salePPStreet as street,
    wp_sshow_sales.salePPCity as city,
    wp_sshow_sales.salePPState as state,
    wp_sshow_sales.salePPZip as zip,
    (CASE WHEN wp_sshow_tickets.priceID = 1 THEN 'Cerro Gordo' 
          WHEN wp_sshow_tickets.priceID = 2 THEN 'Franklin' 
          WHEN wp_sshow_tickets.priceID = 3 THEN 'Butler' 
          WHEN wp_sshow_tickets.priceID = 4 THEN 'Hardin' 
          WHEN wp_sshow_tickets.priceID = 5 THEN 'Floyd' 
          WHEN wp_sshow_tickets.priceID = 6 THEN 'Mitchell' 
          WHEN wp_sshow_tickets.priceID = 7 THEN 'Hancock' 
          WHEN wp_sshow_tickets.priceID = 8 THEN 'Worth' 
          WHEN wp_sshow_tickets.priceID = 9 THEN 'Wright' 
          WHEN wp_sshow_tickets.priceID = 12 THEN 'Dickinson' 
          WHEN wp_sshow_tickets.priceID = 13 THEN 'Howard' 
          WHEN wp_sshow_tickets.priceID = 14 THEN 'Palo Alto' 
          WHEN wp_sshow_tickets.priceID = 15 THEN 'Calhoun' 
          WHEN wp_sshow_tickets.priceID = 16 THEN 'Woodbury' 
          WHEN wp_sshow_tickets.priceID = 17 THEN 'Emmet' 
          WHEN wp_sshow_tickets.priceID = 18 THEN 'Kossuth' 
          WHEN wp_sshow_tickets.priceID = 19 THEN 'Winnebago' 
          WHEN wp_sshow_tickets.priceID = 22 THEN 'Boone' 
          WHEN wp_sshow_tickets.priceID = 23 THEN 'Buena Vista' 
          WHEN wp_sshow_tickets.priceID = 24 THEN 'OBrien' 
          WHEN wp_sshow_tickets.priceID = 25 THEN 'Osceola' 
          WHEN wp_sshow_tickets.priceID = 26 THEN 'Pocahontas' 
          WHEN wp_sshow_tickets.priceID = 27 THEN 'No County' 
          ELSE 'Error No ID' END) AS 'County',
    wp_sshow_tickets.ticketQty as qty,
    IF (wp_sshow_verifys.verifyID IS NULL,TRUE,FALSE) wp_sshow_verifys2
    FROM wp_sshow_sales
    INNER JOIN wp_sshow_tickets
      ON wp_sshow_sales.saleID = wp_sshow_tickets.saleID
    INNER JOIN wp_sshow_verifys 
      ON wp_sshow_verifys.saleID=wp_sshow_sales.saleID
...

此外,您的最后一列与一个表共享一个名称,其名称与Abhik Chakraborty评论不同。

只是一个评论,你真的没有一个将priceID转换为值的表吗?如果数据存在于这样的表中,那么拥有外连接会简单得多。随着新的priceID进入,你必须修改这个查询...从长远来看我会想到糟糕的设计。

--------------解决遇到的新错误---

支持if语句现在添加到第一个查询10列...

您需要在第二个查询中添加一列。

至少你可以......所以列数相匹配,但也许你需要做一个类似的if语句来获得第二个查询中的结果。

live_15.qty as qty, Null
FROM live_15