TABLE 1
+----+-------+-------+-------+
| uid | color | brand | model |
+----+-------+-------+-------+
| 10 | 1 | 2 | 1 |
+----+-------+-------+-------+
TABLE 2
+----+-------+-------+-------+
| uid | quantity |model |color|
+----+-------+-------+-------+
| 25 | 2 | 2 | 1 |
+----+-------+-------+-------+
我有很多这样的表,其中 uid 列存在于每个表中。我在变量中有一个值,比如var1 = 25。我想检查var1值是否与任何表的任何uid值匹配。如果匹配,我想打印表名。任何人都可以帮我这个吗?
我试过这样做,我找到了
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
但这并不是我想要的,因为我想选择数据库中的所有表而不管表名。如果将来添加任何表,那么它也应该被选中。
答案 0 :(得分:0)
首先,information_schema
表没有特定的元组数据。
我建议你考虑不同的设计。
一个。创建一个元表并使用触发器(附加到基表)来维护元表。
CREATE TABLE meta_table (
id INT AUTO_INCREMENT,
uid INT,
table_name VARCHAR(50)
);
# When you need to add new table (table 3)
CREATE TABLE table_3 (
uid INT,
field1 INT,
field2 INT,
field3
);
DELIMITER $$
CREATE TRIGGER table_3_insert
AFTER INSERT ON table_3
FOR EACH ROW
BEGIN
INSERT INTO meta_table (uid, table_name)
VALUE (NEW.uid, "table_3");
END$$
DELIMITER ;
# If data in `table_3` might be changed or deleted,
# then create trigger for `delete` and `update`
B中。仅使用一个包含非结构化字段的表并在应用程序中解析data
字段
CREATE TABLE table (
uid INT,
table_type INT,
data VARCHAR(255)
);
INSERT INTO table (10, 1, '{"color":1,"brand":2,"model":1}');
INSERT INTO table (10, 2, '{"quantity":2,"model":2,"color":1}');
正如您提到的“经常添加任何表格”,我强烈推荐B解决方案。经常更改模式(创建表)并不是一个好的设计。