尝试在 SQL 中使用表别名
我是一名图形设计师,尽力理解表别名,但它不起作用。 到目前为止
SELECT colours.colourid AS colourid1,
combinations.manufacturercolourid AS colourmanid1,
colours.colourname AS colourname1,
colours.colourhex AS colourhex1,
combinations.qecolourid2 AS colouridqe2,
colours.colourid AS colourid2,
colours.colourname AS colourname2,
colours.colourhex AS colourhex2,
colours.colourid AS colourid3,
combinations.qecolourid3 AS colouridqe3,
colours.colourname AS colourname3,
colours.colourhex AS colourhex3,
colours.colourid AS colourid4,
combinations.qecolourid4 AS colouridqe4,
colours.colourname AS colourname4,
colours.colourhex AS colourhex4,
combinations.coloursupplierid
FROM combinations
INNER JOIN colours
ON colours.colourid = combinations.manufacturercolourid;
,我的想法是:在颜色查找表中,id 将从查找表中提取颜色代码、十六进制和名称,以便我可以提取 4 种颜色的颜色代码、十六进制和名称我正在寻找的。我可以让它工作,但它只提取名字、代码和十六进制,我只是没有看到我做错了什么。
I'm a graphic designer trying my best to understand table aliases, but it's not working.
Here's what I have so far:
SELECT colours.colourid AS colourid1,
combinations.manufacturercolourid AS colourmanid1,
colours.colourname AS colourname1,
colours.colourhex AS colourhex1,
combinations.qecolourid2 AS colouridqe2,
colours.colourid AS colourid2,
colours.colourname AS colourname2,
colours.colourhex AS colourhex2,
colours.colourid AS colourid3,
combinations.qecolourid3 AS colouridqe3,
colours.colourname AS colourname3,
colours.colourhex AS colourhex3,
colours.colourid AS colourid4,
combinations.qecolourid4 AS colouridqe4,
colours.colourname AS colourname4,
colours.colourhex AS colourhex4,
combinations.coloursupplierid
FROM combinations
INNER JOIN colours
ON colours.colourid = combinations.manufacturercolourid;
Now, the idea is that in the colours lookup table, the id will pull the colour code, hex and name from the lookup table so that I can pull the colour code, hex and name for the 4 colours that I'm looking for. I can get this to work, but it only pulls up the first name, code and hex and I'm just not seeing what I'm doing wrong.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您的问题是您仅链接颜色表中的一条记录,因为您的 SQL 中只有一个 JOIN。该记录将与Manufacturer_colour_id 指定的颜色匹配。
您还可能遇到一个进一步的问题,因为您的组合表似乎不符合正确的范式(尽管我可能是错的,不知道您试图表示的数据的实际性质)。
如果我正确理解您的问题,解决方案(使用您当前的表结构)将更像是:
这里发生的情况是我链接颜色表四次,针对组合表中的每个 color_id 字段链接一次。为此,我每次都需要为表名添加别名,以便知道在返回列的列表中使用四种可能的颜色实例中的哪一种。另外,如果一个或多个 color_id 列可能为空,我会使用 OUTER JOIN。如果 INNER JOIN 发生这种情况,则整行将从结果集中删除。
Your problem is that you are linking in only a single record from the colours table because you only have a single JOIN in your SQL. That record will match the color specified by manufacturer_colour_id.
You may also have a further problem in that your combinations table does not appear to be in proper normal form (although I could be wrong, not knowing the actual nature of the data you're trying to represent).
If I understand your problem correctly, the solution (using your current table structures) will be something more like:
What's happening here is that I'm linking the colours table four times, once for each of the colour_id fields in the combinations table. To do so, I need to alias the table name each time so that I know which of the four possible instances of colours to use in the list of returned columns. Also, I'm using OUTER JOINs in the event that one or more colour_id columns might be empty. If that happened with INNER JOINs, the entire row would drop out of the result set.
您可以使用表别名来减少所需的输入量 - 通过添加如下内容:
通过为表
组合
定义表别名cb
,您可以使用该较短的别名在 SELECT 和语句的其他部分中,而不必总是拼写出整个表名。但你的问题确实在于 JOIN - 你只加入一次,但你期望得到四个结果......
你需要做的是这样的:
You can use table aliases to reduce the amount of typing needed - by adding something like this:
By defining a table alias
cb
for your tablecombinations
, you can use that shorter alias in your SELECT and other parts of your statement, instead of having to always spell out the entire table name.But your problem really is in the JOIN - you're only joining once, yet you expect to get four results back....
What you need to do is something like this:
这不是一个详尽的答案,但您的问题与您使用 JOIN 的方式有关。表和列别名不影响输出结果集。
您四次选择相同的字段名称,这就是您得到奇怪结果的原因。
This is not an exhaustive answer, but your problem has to do with your how you are using the JOINs. Table and column aliases do not affect the output result set.
You are selecting the same field names four times, and that is why you are getting strange results.
这些都很棒,但由于某种原因,当我尝试使用它们时,我在页面中收到错误:
[Microsoft][ODBC Microsoft Access Driver] 查询表达式中的语法错误(缺少运算符)
我想我了解如何使用现在我已经使用了表别名,但由于某种原因,即使我确信它应该可以工作,但页面不喜欢它。
These are all great, but for some reason when I try to use them, I get an error in the page:
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression
I think I understand how to use the table aliases now, but for some reason, even though I'm sure it should work, the page doesn't like it.