使用information_schema列不明确

时间:2014-01-30 16:15:44

标签: php mysql laravel

我的代码如下:

SET @sql = CONCAT('SELECT s.name AS size,', 
    (SELECT REPLACE(
        GROUP_CONCAT(COLUMN_NAME), 
        'ps.product_id, ps.status, ps.created_by, ps.created_at, ps.updated_at, ps.deleted_at,', ''
    ) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'product_sku' 
AND TABLE_SCHEMA = 'swafap'), ' FROM product_sku AS ps
INNER JOIN size_code AS s ON s.id = ps.size_code_id
WHERE ps.product_id = 4741');

PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

我需要从product_sku中选择很多列。我查看了流行的答案帖子来解决这个问题。我选择其他列和东西没有问题,但是一旦我做了一个连接,它说id是不明确的,这是有道理的,因为id存在于两个表中..

然而,我并不确定如何妥善解决这个问题,因为我仍然试图绕过它正在做的事情。

在product_sku中,有一个名为'size_code_id'的列,我只需要在size_code表中引用该大小代码的名称。

非常感谢任何帮助。我希望我能用流利/雄辩将其翻译成Laravel =)因为我真的很喜欢这个解决方案。我的原始查询如下所示:

SELECT ps.manufacturer_sku, ps.sku, ps.units, s.name AS size, ps.smis, ps.purchase_cost, ps.branch_cost,
ps.annual_sales_unit, ps.annual_sales_dollar, ps.pipeline_unit, ps.pipeline_dollar, ps.upc_barcode, ps.lvl_1_scc_barcode,
ps.mast_carton_scc_barcode, ps.pallet_scc_barcode, ps.prod_manufacturer_comp, ps.part_no_comp, ps.wd_price_comp,
ps.jobber_price_comp, ps.refinisher_price_comp, ps.retail_price_comp, ps.initial_lead_time, ps.reorder_lead_time, 
ps.min_quant, ps.manufacturer_location, ps.country_code, ps.tariff_code, ps.weight, ps.lngth, ps.height, ps.width,
ps.shipping_desc, ps.lvl_1_quant, ps.master_carton_quant, ps.pallet_quant, ps.wd_price_rec, ps.jobber_price_rec, 
ps.refinisher_price_rec, ps.retail_price_rec
FROM product_sku AS ps
INNER JOIN size_code AS s ON s.id = ps.size_code_id
WHERE ps.product_id = 4741;

非常难看..

1 个答案:

答案 0 :(得分:1)

我不声称理解你的字符串处理(REPLACE逻辑)。但是,当您使用information_schema数据构建查询时,您最好使用表名限定列名。

也许是

GROUP_CONCAT(COLUMN_NAME)

应该是

GROUP_CONCAT(CONCAT(TABLE_NAME,'.','COLUMN_NAME))