我前几天设置了我的查询
$query = "SELECT card_id,title,description,meta_description,seo_keywords,price
FROM cards,card_cheapest order by card_id";
如您所见,我从表card_id,title,description,meta_description,seo_keywords
中选择cards
,价格来自cheapest_card
。它们都有card_id
共同(在两个表中)。但是,我遇到了一个问题。当我在navicat lite中运行查询时,收到错误"card_id is ambiguous"
。我做错了吗?
答案 0 :(得分:4)
当两个或多个表的列名称相同时,您必须限定您希望该列所在的表。
即:
$query = "SELECT cards.card_id,title,description,meta_description,seo_keywords,price
FROM cards,card_cheapest order by card_id";
此外,你真的想以这种方式运行查询,没有WHERE / JOIN子句来定义如何加入这两个表吗?
$query = "SELECT cards.card_id,title,description,meta_description,seo_keywords,price
FROM cards,card_cheapest WHERE cards.card_id = card_cheapest.card_id
ORDER BY card_id";
答案 1 :(得分:1)
如果您选择的两个表中具有相同的列名,则必须在SELECT
中为其中一个表名添加前缀(如果它是相同的数据则无关紧要) )
,例如SELECT cards.card_id, ...
编辑:然而,cularis的答案比我的解释更为明确,如果你想获得正确的结果,请注意加入两个card_id列。
答案 2 :(得分:0)
当您运行从具有共享字段名称的多个表中获取信息的查询时,您需要指定要从哪个表中提取哪个字段。您可以通过在字段名称前指定表名来执行此操作。
在您的情况下,您有两种选择:
cards.card_id或card_cheapest.card_id。
我也同意@cularis,你可能更喜欢加入,但你仍然需要指定你想要选择的card_id:来自card或card_cheapest的那个。