gpt4 book ai didi

android - 为未知添加默认值

转载 作者:行者123 更新时间:2023-11-29 18:12:14 25 4
gpt4 key购买 nike

我有一个用户列表和一个疫苗列表,我想跟踪用户拥有哪些疫苗,所以我也有一个 vaccine_users 表。我想在 View 中显示复选框列表、疫苗名称以及用户是否接种了该特定疫苗。

我目前正在使用 ListActivity,我知道它会回收 View ,所以我需要在游标中包含数据,这给我带来了一些麻烦,因为我只想跟踪谁接种了哪种疫苗,并非用户没有的所有疫苗。

所以我想要这样的东西:

userId     vaccineId     hasVaccine
1 2 0
1 2 1

我有表 user、vaccine、vaccine_user,我可以查询用户拥有哪种疫苗,但是 hasVaccine=0 行给我带来了麻烦,因为我没有存储用户没有拥有哪种疫苗。

编辑:我认为左外连接在正确的轨道上,我试过这个:

SELECT v.name, u._id as userId, vu._id as vaccineId FROM user u LEFT OUTER JOIN vacc_user vu ON u._id = vu.userId LEFT OUTER JOIN vaccine v ON v._id = vu.vaccineId WHERE u._id = 4;

我认为应该是这样

name        userId     vaccineId
Ebola 4 2
Hepatit A 4 null

如果用户接种了埃博拉疫苗而不是甲型肝炎疫苗,但我只得到埃博拉病毒行。

编辑 2:这是当前形式的相关表,为 sqllite3 创建,但希望也适用于 MySql。

CREATE TABLE user (_id integer primary key autoincrement, name text not null default 'unnamed');
CREATE TABLE vacc_user(_id integer primary key autoincrement, userId integer not null default 0, vaccineId integer not null default 0);
CREATE TABLE vaccine (_id integer primary key autoincrement, name text default 'unnamed vacc', text text default 'no desc');

最佳答案

你的第二个问题(在编辑之后)是因为就 SQL 而言,比较中有空的任何东西都是假的。

你有两个选择:

1) 将您的查询更改为使用 OR 来覆盖 null 意外事件 (v._id IS NULL),这样您将:

SELECT v.name, u._id as userId, vu._id as vaccineId FROM user u LEFT OUTER JOIN vacc_user vu ON u._id = vu.userId LEFT OUTER JOIN vaccine v ON ((v._id = vu.vaccineId) OR (v._id IS NULL)) WHERE u._id = 4;

2) 在 SQL 表定义本身或通过程序代码中为未收到的疫苗接种表添加条目并使用默认条目(可能是“nv”表示“未接种疫苗”),然后您应该获得您想要的结果对该查询的渴望。

关于android - 为未知添加默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com