我有一个代表一副牌的表,其中有4张牌,每张牌都有一个唯一的ID。现在我想在表中查找特定的牌ID,并找出它是副牌中的哪张牌。
| 卡片1|卡片2|卡片3|卡片4|
| - ------|- ------|- ------|- ------|
| 卡ID 1|卡ID 2|卡ID 3|卡ID 4|
例如,如果我表希望这样,我将执行以下操作:SELECT列名WHERE卡ID 3 IN(卡1,卡2,卡3,卡4)
寻找答案我找到了这个:SQL Server : return column names based on a record's value
但这似乎对PostgreSQL不起作用
2条答案
按热度按时间mgdq6dx11#
SQL服务器的
cross apply
是SQL标准的cross join lateral
。Demonstration.
然而,真正的问题是表的设计,一般来说,如果你有col1,col2,col3 ...你应该使用连接表。
我们已经确保一副牌不能有相同的牌,也不能有两张牌在相同的位置。
可以直接查询卡片的位置。
而且一副牌中的牌数没有任意限制,你可以用触发器来应用一张。
Demonstration.
z31licg02#
这是一个相当糟糕的主意。列名属于数据库结构,而不是数据。因此,您可以选择存储为数据的ID和名称,但您不应该选择列名。实际上,使用您的应用的用户不应该对列名感兴趣;它们可能相当技术性。
更改数据模型并将卡名称与ID沿着存储可能是一个好主意,但我不知道您希望如何处理您的数据。
无论如何,如果您想坚持当前的数据库设计,您仍然可以选择这些名称,方法是将它们包含在查询中: