Php Mysql:完整性约束冲突:1052,列。。。是模棱两可的,但似乎不是

Php Mysql:完整性约束冲突:1052,列。。。是模棱两可的,但似乎不是,php,mysql,pdo,Php,Mysql,Pdo,mysql请求有问题。 特别是一个看起来像 supplier.name AS supplier_id , 导致1052错误-订单条款中的1052列“供应商id”不明确,但代码如下 CONCAT(supplier.name) AS supplier_id , 工作正常,没有错误。为什么? 完整工作sql: SELECT supplier_contract.*, CONCAT('', status.name, '') as status_id , CONCAT(supplier.name) AS

mysql请求有问题。 特别是一个看起来像

supplier.name AS supplier_id ,
导致1052错误-订单条款中的1052列“供应商id”不明确,但代码如下

CONCAT(supplier.name) AS supplier_id ,
工作正常,没有错误。为什么?

完整工作sql:

SELECT
supplier_contract.*,
CONCAT('', status.name, '') as status_id ,
CONCAT(supplier.name) AS supplier_id ,
CONCAT(currency.name) AS currency_id ,
CONCAT(incoterms.name) AS incoterms_id
    from supplier_contract
LEFT OUTER JOIN status ON supplier_contract.status_id = status.id
LEFT OUTER JOIN supplier ON supplier_contract.supplier_id = supplier.id
LEFT OUTER JOIN currency ON supplier_contract.currency_id = currency.id
LEFT OUTER JOIN incoterms ON supplier_contract.incoterms_id = incoterms.id
ORDER BY name DESC, supplier_id DESC
LIMIT 0, 26
SELECT
supplier_contract.*,
CONCAT('', status.name, '') as status_id ,
supplier.name AS supplier_id ,
currency.name AS currency_id ,
incoterms.name AS incoterms_id
    from supplier_contract
LEFT OUTER JOIN status ON supplier_contract.status_id = status.id
LEFT OUTER JOIN supplier ON supplier_contract.supplier_id = supplier.id
LEFT OUTER JOIN currency ON supplier_contract.currency_id = currency.id
LEFT OUTER JOIN incoterms ON supplier_contract.incoterms_id = incoterms.id
ORDER BY name DESC, supplier_id DESC
LIMIT 0, 26
sql不工作:

SELECT
supplier_contract.*,
CONCAT('', status.name, '') as status_id ,
CONCAT(supplier.name) AS supplier_id ,
CONCAT(currency.name) AS currency_id ,
CONCAT(incoterms.name) AS incoterms_id
    from supplier_contract
LEFT OUTER JOIN status ON supplier_contract.status_id = status.id
LEFT OUTER JOIN supplier ON supplier_contract.supplier_id = supplier.id
LEFT OUTER JOIN currency ON supplier_contract.currency_id = currency.id
LEFT OUTER JOIN incoterms ON supplier_contract.incoterms_id = incoterms.id
ORDER BY name DESC, supplier_id DESC
LIMIT 0, 26
SELECT
supplier_contract.*,
CONCAT('', status.name, '') as status_id ,
supplier.name AS supplier_id ,
currency.name AS currency_id ,
incoterms.name AS incoterms_id
    from supplier_contract
LEFT OUTER JOIN status ON supplier_contract.status_id = status.id
LEFT OUTER JOIN supplier ON supplier_contract.supplier_id = supplier.id
LEFT OUTER JOIN currency ON supplier_contract.currency_id = currency.id
LEFT OUTER JOIN incoterms ON supplier_contract.incoterms_id = incoterms.id
ORDER BY name DESC, supplier_id DESC
LIMIT 0, 26
错误消息:
致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[23000]:完整性约束冲突:在C:\wamp\www\stream\classes\class.DBMethods.inc:15堆栈跟踪:#0 C:\wamp\www\stream\classes\class.DBMethods.inc(15):PDO->prepare('SELECT supplier…'))#1c:\wamp\www\stream\classes\class.TableGen.inc(20):DBMethods::selectBySql('selectsupplier…')#2c:\wamp\www\stream\classes\class.TableGen.inc(218):TableGen->getRecords()#3c:\wamp\www\stream\index.php(82):TableGen->viewRecords()#4{main}在第15行的C:\wamp\www\stream\classes\class.DBMethods.inc中抛出

使用别名/表名作为
supplier\u id
的特定引用的前缀,只需将表前缀添加到
ORDER BY
条款中的所有字段中,该列是不明确的,因为您有
supplier\u合同。*
其中包含
supplier\u id
等等。可能是MySQL的错误。你有两个供应商id的表。
concat
以某种方式清理了它。使用别名alwayssupplier.name作为供应商id。别名supplier id本身是供应商合同表的一个字段。这就是为什么这两个领域之间会发生冲突。请提供唯一的别名并尝试使用它。