当前位置: 首页 > 面试题库 >

在一列中添加多个值

狄玉书
2023-03-14
问题内容

我必须按照下面显示的方式创建一个表。我们可以这样创建吗?(如是)

表名称:样本

product_id|   product_name| category   |
    1     |   Sample1     |  1|2|3     |
    2     |   sample2     |  4|5|6     |

其中包含多个值的类别归档。

以及我们如何搜索类别4出现在表格的哪一行。


问题答案:

您无法创建嵌套表。而且您想到的并不是设计这样的桌子的好主意。您应该有两个表(如果是category,则恰好三个包含描述)。一个用于product,第二个表保存 每个产品类别示例设计如下所示,

CREATE TABLE Product
(
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(50) UNIQUE
);

CREATE TABLE Category
(
    CategoryID INT PRIMARY KEY,
    CategoryName VARCHAR(50) UNIQUE
);

CREATE TABLE Product_Category
(
    RecordD INT AUTO_INCREMENT PRIMARY KEY,
    CategoryID INT,
    ProductID INT,
    CONSTRAINT tb_uq UNIQUE(CategoryID, ProductID)
);

和填充样本记录

INSERT Category VALUES (1, 'Fruit');
INSERT Category VALUES (2, 'Vegetable');

INSERT Product VALUES (1, 'Apple');
INSERT Product VALUES (2, 'Banana');
INSERT Product VALUES (3, 'Cabbage');
INSERT Product VALUES (4, 'Squash');
INSERT Product VALUES (5, 'Tomato');

INSERT Product_Category (CategoryID, ProductID) VALUES (1,1);
INSERT Product_Category (CategoryID, ProductID) VALUES (1,2);
INSERT Product_Category (CategoryID, ProductID) VALUES (2,3);
INSERT Product_Category (CategoryID, ProductID) VALUES (2,4);
INSERT Product_Category (CategoryID, ProductID) VALUES (1,5);
INSERT Product_Category (CategoryID, ProductID) VALUES (2,5);
  • SQLFiddle演示( 包含记录

样本查询

-- NORMAL QUERY
SELECT  a.ProductName, c.CategoryName
FROM    Product a
        INNER JOIN Product_category b
          ON a.ProductID = b.ProductID
        INNER JOIN Category c
          ON b.CategoryID = c.CategoryID
ORDER BY ProductName;

-- If you want catgoryName to be comma separated
SELECT  a.ProductName, GROUP_CONCAT(c.CategoryName) CategoryList
FROM    Product a
        INNER JOIN Product_category b
          ON a.ProductID = b.ProductID
        INNER JOIN Category c
          ON b.CategoryID = c.CategoryID
GROUP BY ProductName
ORDER BY ProductName;


 类似资料:
  • 在所有的例子代码中,我们在引导过程中通过 handler() 或childHandler() 都只添加了一个 ChannelHandler 实例,对于简单的程序可能足够,但是对于复杂的程序则无法满足需求。例如,某个程序必须支持多个协议,如 HTTP、WebSocket。若在一个 ChannelHandle r中处理这些协议将导致一个庞大而复杂的 ChannelHandler。Netty 通过添加多

  • 问题内容: 我需要向一个表中添加多个列,但将这些列放置 在 名为的列 之后。 我已经试过了: 我收到此错误: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第7行的’)AFTER ‘ 附近使用正确的语法 如何在这样的查询中使用AFTER? 问题答案: 尝试这个 检查语法

  • 问题内容: 我想向现有表中添加2个新列。 其中之一应具有默认值 0 (也应填写在现有行中)。 我尝试了以下语法: 但这会引发异常。我应该怎么写? 问题答案: 您可以使用此: 或这个: 更多:ALTER TABLE

  • 我正在尝试将多列添加到phpMyAdmin中的现有表中,但我一直收到相同的错误: #1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册以获取正确的语法... 我在写: 我已经参考了过去在StackOverflow上的帖子,我正在遵循专家的建议,那么为什么我会出错呢?

  • 我是java新手,正在努力克服它。我有类似(< code>String URL,int Score)的数据,我想在数组列表中实现它。我研究了如何在< code>ArrayList或< code>LinkedList中实现多种类型的变量,发现解决方案是从超类创建子类,我创建了这个子类: 我的超级班是: 当我尝试使用添加对象时,我遇到了错误?该错误说: 类型ArrayList中的add(int,MyS

  • 问题内容: 我怎样才能通过mysql仅在一行中加入多行? 例子 : 学生表 现在我想要这种格式 我不确定该怎么做?我应该创建视图还是表格? 我想一个观点会很好。 问题答案: 我同意其他答案,即与PHP一起使用逗号分隔的值进行拆分可能是最好的方法,但是,如果由于任何其他原因需要通过Pure SQL建议的输出,则建议使用以下方法之一。 1.自我加入 2.使用ROW_NUMBER类型函数进行汇总