我正在使用 SQLite v3.31.1 和 python 3.7.9。
如何確定特定 id 值存在于哪些表中?我認為像這樣的東西存在于 MYSQL 中作為“INFORMATION_SCHEMA”,但我還沒有找到 SQLite 替代方案。
我有一個表結構,它遵循我認為稱為“類表繼承”的內容。基本上,我有一個產品表,其中包含所有產品共有的屬性,以及包含該類產品的特定屬性的表。“產品”主表包含一個作為主鍵的 id 列,這在子表中用作外鍵。因此,特定專案同時存在于產品表和子表中,但沒有其他地方(除了一些用于 FTS 的虛擬表)。
我目前的解決方案是獲取所有表名稱,例如
SELECT tbl_name
FROM sqlite_master
WHERE type='table'
然后使用回圈遍歷表
SELECT 1
FROM child_table
WHERE id = value
但似乎應該有更好的方法。
謝謝你。
uj5u.com熱心網友回復:
雖然我最初發布的答案會起作用,但速度很慢。您可以在 python 中添加一個哈希映射,但是在重建哈希映射時它會很慢。
相反,我在我的 SQL 設定中使用觸發器來創建一個包含相關資訊的表。這有點脆弱,但對于大量搜索結果要快得多,因為 db 只查詢一次,并且在資料庫初始化時加載表。
我的示例,-- 有一個名為 Products 的父表,它具有 id 主鍵。
CREATE TABLE IF NOT EXISTS ThermalFuse (
id INTEGER NOT NULL,
ratedTemperature INTEGER NOT NULL,
holdingTemperature INTEGER NOT NULL,
maximumTemperature INTEGER NOT NULL,
voltage INTEGER NOT NULL,
current INTEGER NOT NULL,
FOREIGN KEY (id) REFERENCES Product (id)
);
CREATE TABLE IF NOT EXISTS Table_Hash (
id INTEGER NOT NULL,
table_name TEXT NOT NULL,
FOREIGN KEY (id) REFERENCES Product (id)
);
CREATE TRIGGER ThermalFuse_ai AFTER INSERT ON ThermalFuse
BEGIN
INSERT INTO Table_Hash (id, table_name)
VALUES (new.id, 'ThermalFuse');
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367844.html
上一篇:最快驗證器:驗證兩個欄位不相等
