MYSQL / Coldfusion CFQUERY:如何使用SELECT t1避免数据覆盖。*,t2。*?

时间:2011-03-22 19:03:38

标签: mysql coldfusion cfquery

我正在寻找一种方法,不会列出所有字段名,并在每个字段名上使用AS。也许这更像是一个mysql问题。为了清楚起见,我举了一个例子:

table1: users
+-id-+------name------+-preferred_moose_id-+-preferred_preparation_id-+
| 20 | Chester Chore  |          1         |             3            |
| 72 | George Garnish |          2         |             2            |
| 88 | Liver Laddykin |          2         |             3            |
+----+----------------+--------------------+--------------------------+

table2: moose_types
+-id-+------name------+-------size------+---------------diet--------------+
| 1  | Canadian Moose | Pretty Big      | Corn and snow                   |
| 2  | Red Moose      | Not as big      | Dolphins                        |
| 3  | Horses         | Size of a horse | Oats, cheese, okra, and farmers |
+----+----------------+-----------------+---------------------------------+

table3: preparation_types
+-id-+-------name-------+-difficulty-+
| 1  | Boiled           |     3      |
| 2  | Stuffed          |     5      |
| 3  | Butterflied      |     9      |
+----+------------------+------------+

如果我有这样的SQL:

SELECT users.*, moose_types.*, preparation_types.*
  FROM users
 INNER JOIN moose_types ON moose_types.id = users.preferred_moose_id
 INNER JOIN preparation_types ON preparation_types.id = users.preferred_preparation_id
 WHERE users.id = 88

然后我转出查询,我最终得到这样的东西:

+---diet---+-difficulty-+-id-+-id-+-id-+------name------+------name------+------name------+-preferred_moose_id-+-preferred_preparation_id-+-------size------+
| Dolphins |     9      | 88 | 88 | 88 | Liver Laddykin | Liver Laddykin | Liver Laddykin |         2          |             3            | Not as big      |
+----------+------------+----+----+----+----------------+----------------+----------------+--------------------+--------------------------+-----------------+

注意数据被覆盖/重复。肝脏Laddykin不喜欢吃Laddykinned Liver Laddykin,无论它是否是9的难度。这是CF故意做的一个安全措施,我可以理解他们为什么这样做。但是,必须有办法避免这种情况。第一个是在查询中使用AS运算符并手动列出所有字段名称。 BUT

再次,我迭代:我想避免手动列出所有字段并在每个字段上使用AS,因为这会使事情变得复杂,除非可以在不列出字段的情况下完成并且可以通过coldfusion或MySQL完成。如果没有解决方案,我很好,但我知道我不是CF专家,当然不是 mySQL专家。请随意指出错误或我忽略的东西,即使它对你来说似乎微不足道。

更新 到目前为止,感谢评论者!不幸的是,更改字段名称不是一种选择(虽然它肯定会起作用)。

澄清实际问题

我正在寻找的是某种方式,ColdFusion或MySQL可以自动或以编程方式为我提供不同的字段名称(因此可以区分),而无需手动列出每个字段(甚至试图避免使用cfloop ,我知道我正在努力做到这一点,并使用AS声明它。

我在想,可能会有一些我不知道的高级SQL。

1 个答案:

答案 0 :(得分:0)

对于ColdFusion,您的列名称必须是唯一的,没有办法解决这个问题。

但是,列出字段名称并在每个字段上使用AS并不是那么糟糕。通过一个或两个快速循环,您可以动态生成SQL(无需明确地提出结果),您将全部设置好!