在mysql中从多个表中选择列
我有很多这样的表,其中每个表中都有uid列,变量中有一个值,比如var1=25。我想检查var1值是否与任何表的任何uid值匹配。如果匹配,我想打印表名。有人能帮我吗 我试着这样做,我发现在mysql中从多个表中选择列,mysql,Mysql,我有很多这样的表,其中每个表中都有uid列,变量中有一个值,比如var1=25。我想检查var1值是否与任何表的任何uid值匹配。如果匹配,我想打印表名。有人能帮我吗 我试着这样做,我发现 TABLE 1 +----+-------+-------+-------+ | uid | color | brand | model | +----+-------+-------+-------+ | 10 | 1 | 2 | 1 | +----+-------+-------
TABLE 1
+----+-------+-------+-------+
| uid | color | brand | model |
+----+-------+-------+-------+
| 10 | 1 | 2 | 1 |
+----+-------+-------+-------+
TABLE 2
+----+-------+-------+-------+
| uid | quantity |model |color|
+----+-------+-------+-------+
| 25 | 2 | 2 | 1 |
+----+-------+-------+-------+
但这并不能满足我的要求,因为我想选择数据库中的所有表,而不考虑表名。如果将来添加了任何表,那么它也应该被选中。首先,
信息\u schema
表没有特定的元组数据。
我建议你考虑不同的设计。
A.制作一个元表并使用触发器(附在基表上)来维护元表
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
B.仅使用一个表和非结构化字段,并在应用程序中解析数据字段
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解决方案。经常更改模式(创建表)不是一个好的设计。如果sam更详细地说明您的情况,可以考虑其他各种解决方案。我不明白您的意思。我想要什么我已经清楚地写在问题中了。请帮助我理解如何实现它?答案编辑添加更多的解释和评论。
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}');