0

そのように選択できる方法はありますか

select * from attributes where product_id = 500

戻るだろう

id  name     description
 1  wheel    round and black
 2  horn     makes loud noise
 3  window   solid object you can see through

そしてクエリ

select * from attributes where product_id = 234

このテーブルへのクエリと同じ結果が返されます。

明らかに、where 句を削除して、1 日を過ごすことができます。しかし、これには実際には変更したくないコードの編集が含まれるため、データベース レベルでこれを修正しようとしています。

where句の内容を無視して、ビューなどを使用して必要なものを返す「魔法の」方法はありますか?

4

5 に答える 5

3

可能だったとしても、うまくいくとは思えません。これらのWHERE句はどちらも、1つのものが返されることを期待しているため、コードは、すべてではなく、返された最初の行を使用する可能性があります。

また、データベースに、将来の開発者が理解しようとして髪の毛を抜くような動作を提供します。

適切に実行し、コードを修正してください。

于 2008-12-03T21:59:35.490 に答える
2

クエリを編集できない場合は、追加できますか?あなたは固執することができます

OR 1=1

終わりに。

于 2008-12-04T08:51:30.930 に答える
2

または、整数の代わりに「product_id」を渡すことができます。これをチェックするコードがない場合は、クエリは次のようになります。

select * from attribute where product_id = product_id;

これにより、テーブルのすべての行が表示されます。

于 2008-12-03T22:05:54.713 に答える
1

結果セットのメタデータを使用して必要なものを取得できる場合がありますが、結果セットにはフィールドの説明がありません。準備されたクエリから結果セットのメタデータを取得するための特定の API は、プログラミング言語によって異なります。使用している言語については言及していません。

製品テーブルのINFORMATION_SCHEMAをクエリできます。

SELECT ordinal_position, column_name, column_comment
FROM INFORMATION_SCHEMA.columns
WHERE table_name = 'products' AND schema_name = 'mydatabase';

データベースをEntity-Attribute-Value設計に再構築することはできますが、それはコードを修正するよりもはるかに野心的な変更です。

または、SQL データベースを完全に放棄して、 RDFなどのセマンティック データ ストアを使用することもできます。これにより、データをクエリするのと同じ方法でエンティティのメタデータをクエリできます。

于 2008-12-03T22:59:15.510 に答える
0

このアイデアのように見える限り、私は常に物事を行うためのクレイジーな方法に興味があります. 私が思いつく最善の解決策は、製品テーブルを使用してすべての製品を取得し、属性テーブルを使用して属性を取得するビューを使用することだと思います。これにより、考えられるすべての製品が考慮され、すべて同じ結果が得られます。

于 2008-12-04T00:19:22.197 に答える