Я пытаюсь получить этот SQL-запрос правильно, но я продолжаю получать одну строку с нулевыми значениями.SQLite INNER JOIN WHERE column not null
Итак, у меня есть два стола.
Таблица A является chat
Таблица.
Таблица B wallpaper
стол.
chat
может или не может иметь идентификатор обоев, присвоенный значению иностранного ключа.
Я пытаюсь получить картинку, прикрепленную к чату с помощью следующего запроса:
const char *query = "SELECT wallpaper.* FROM wallpaper INNER JOIN chat ON wallpaper.id_wallpaper = chat.id_wallpaper AND (chat.id_chat = ? AND chat.id_wallpaper NOT NULL)";
внутри моего метода:
-(Wallpaper *)getWallpaperForChatHeaderID:(NSString *)chatHeaderID
{
sqlite3_stmt *statement;
const char *query = "SELECT wallpaper.* FROM wallpaper INNER JOIN chat ON wallpaper.id_wallpaper = chat.id_wallpaper AND (chat.id_chat = ? AND chat.id_wallpaper NOT NULL)";
Wallpaper *wallpaper = nil;
if(sqlite3_prepare_v2(_database, query, -1, &statement, nil) == SQLITE_OK)
{
sqlite3_bind_int(statement, 1, [chatHeaderID intValue]);
int statusCode = sqlite3_step(statement);
if(statusCode == SQLITE_DONE)
{
long idWallpaper = sqlite3_column_int(statement, 0);
char *dbFilename = (char *)sqlite3_column_text(statement, 1);
...
wallpaper = [[Wallpaper alloc] initWithWallpaperID:idWallpaper ....];
}
else
{
NSLog(@"sql step status error code: %d", statusCode);
}
sqlite3_finalize(statement);
}
else
{
NSLog(@"Failed to get wallpaper for chat header with ID: %@", chatHeaderID);
}
return wallpaper;
}
Но что постоянно возвращается мне один wallpaper
объекта со всеми поля NULL.
В чате могут быть только 1 обоев. Поэтому я хочу только получить один wallpaper
, где он связан с чатом, определенным идентификатором chatHeaderID.
Насколько я могу видеть, SQL запрос нашел соответствующий chat
запись из chat
таблицы на основе chatHeaderID
я прошел в России, но это, кажется, игнорируя мое ИНЕКЕ:
(chat.id_chat = ? AND chat.id_wallpaper NOT NULL)
Что я ожидая увидеть, что SQL-запрос возвращает 0 записей на данный момент, потому что я не связал записи обоев с любыми записями в чате.
Любые идеи? : D
На самом деле вам не хватает предложения WHERE: 'const char * query =" SELECT wallpaper. * FROM wallpaper INNER JOIN chat ON wallpaper.id_wallpaper = chat.id_wallpaper WHERE chat.id_chat =? И chat.id_wallpaper NOT NULL ";' –
Я, хотя, когда вы помещаете круглые скобки вокруг (chat.id_chat =? И chat.id_wallpaper NOT NULL), это означает ГДЕ? Извините, что мои знания SQL не очень далеки. – Zhang
Я тестировал оба, кажется, работает: P – Zhang