2017-07-05 35 views
0

只是想知道我的数据库。我有两个名为brand和stringInstrumentItem的表。表品牌有名为brandId,名称和图像的列。虽然stringInstrumentItem具有的itemId的一列,品牌,型号和price.Normally我将能够通过这个代码,以显示列的品牌和表stringInstrumentItem的模型数据:如何使用asp.net读取外键的数据虽然eval?

<div id="label"><%# Eval("brand") %> <%# Eval("model") %></div> 

在我的网页的输出将是:Ibanez AB30

但现在,我想了解关系数据库和外键。我将名为brandInstrumentItem的列更改为brandId。现在,用于表stringInstrumentItem的外键的列brandId也引用表brand的主键,名为brandId。

问题是,我不能再做同样的事了。如果我尝试做这行的代码:

<div id="label"><%# Eval("brandId") %> <%# Eval("model") %></div> 

它会给我这样的输出:1 AB30

而不是实际的字符串,它给我的ID来代替。我的问题是,我如何通过table stringInstrumentItem的brandId(外键)与表品牌的brandId(主键)之间的关系来访问名为表品牌名称的列?

请注意,我没有在我的代码中编写任何代码来完成此项工作。它全部是内联代码。请为此提供建议和解决方案。

回答

1

你的SELECT语句将现在需要加入2个表像这样:

SELECT brandid , 
    brand , 
    model 
FROM brand 
    JOIN stringInstrumentItem ON stringInstrumentItem.brandid = brand.brandid; 

现在,您将在输出同时获得,brandidbrand,您可以Eval,因为你需要;在这种情况下,您需要再次登录<%# Eval("brand") %>,但如果您需要根据品牌的唯一ID执行某些操作,则还会获得brandid

更新

改变你的SELECT语句:

SELECT * 
FROM stringInstrumentItem 
     JOIN brand ON stringInstrumentItem.brandid = brand.brandid 
WHERE brandId IN (SELECT brandId 
        FROM brand 
        WHERE name = @brand); 
+0

你的代码工作正常,但我只是想问问如何实施这一解决方案,如果目前我在我的代码有这样的说法:string query =“SELECT * FROM stringInstrumentItem WHERE brandId IN(SELECT brandId FROM brand WHERE name = @brand)”; – RockStar

+0

@RockStar看到我的更新,但避免做'SELECT * FROM ...'总是指定要使用的列。绝不仅限于此。 – Icarus

+0

它给了我一个例外:歧义列名'brandId'..这是什么意思? – RockStar