Для тех, кто борется с этим, попробовав вышеуказанные решения, убедитесь, что идентификатор канала, используемый при создании канала уведомлений, идентичен идентификатору канала, установленному в конструкторе уведомлений.
const val CHANNEL_ID = "EXAMPLE_CHANNEL_ID"
// create notification channel
val notificationChannel = NotificationChannel(CHANNEL_ID,
NOTIFICATION_NAME, NotificationManager.IMPORTANCE_HIGH)
// building notification
NotificationCompat.Builder(context)
.setSmallIcon(android.R.drawable.ic_input_add)
.setContentTitle("Title")
.setContentText("Subtitle")
.setPriority(NotificationCompat.PRIORITY_MAX)
.setChannelId(CHANNEL_ID)
Вы смешиваете неявные соединения с явным соединением. Это допустимо, но вам нужно знать, как это сделать должным образом.
Дело в том, что явные объединения (те, которые реализованы с использованием ключевого слова JOIN
) имеют приоритет над неявными ( «comma» присоединяется, где условие соединения указано в предложении WHERE
).
Вот схема вашего запроса:
SELECT
…
FROM a, b LEFT JOIN dkcd ON …
WHERE …
Вероятно, вы ожидаете, что он будет вести себя например:
SELECT
…
FROM (a, b) LEFT JOIN dkcd ON …
WHERE …
, то есть комбинация таблиц a
и b
соединена с таблицей dkcd
. Фактически, что происходит
SELECT
…
FROM a, (b LEFT JOIN dkcd ON …)
WHERE …
, то есть, как вы уже поняли, dkcd
соединен конкретно с b
и только b
, тогда результат объединения объединяется с a
и далее фильтруется с предложением WHERE
. В этом случае любая ссылка на a
в предложении ON
недействительна, a
неизвестно в этой точке. Вот почему вы получаете сообщение об ошибке.
Если бы я был вами, я бы, вероятно, попытался переписать этот запрос, и одним из возможных решений могло бы быть:
SELECT DISTINCT
a.maxa,
b.mahuyen,
a.tenxa,
b.tenhuyen,
ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa a
INNER JOIN quanhuyen b ON LEFT(a.maxa, 2) = b.mahuyen
LEFT OUTER JOIN (
SELECT
maxa,
COUNT(*) AS tong
FROM khaosat
WHERE CONVERT(datetime, ngaylap, 103) BETWEEN 'Sep 1 2011' AND 'Sep 5 2011'
GROUP BY maxa
) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa <> '99'
ORDER BY a.maxa
таблицы a
и b
соединяются сначала, тогда результат соединяется с dkcd
. В основном, это тот же запрос, что и ваш, только с использованием другого синтаксиса для одного из соединений, что имеет большое значение: ссылка a.maxa
в состоянии соединения dkcd
теперь абсолютно верна.
Как правильно отметил @Aaron Bertrand, вы должны, вероятно, квалифицировать maxa
с определенным псевдонимом, вероятно a
, в предложении ORDER BY
.
Я новичок в SQL, но столкнулся с этой проблемой в ходе курса, который я принимал, и обнаружил, что назначение запроса проекту специально помогло устранить многочастную ошибку. Например, проект, который я создал, был CTU SQL Project, поэтому я убедился, что начал свой сценарий с USE [CTU SQL Project] в качестве первой строки, как показано ниже.
USE [CTU SQL Project]
SELECT Advisors.First_Name, Advisors.Last_Name...and so on.
Иногда эта ошибка возникает, когда вы неправильно используете свою схему (dbo) в своем запросе.
, например, если вы пишете:
select dbo.prd.name
from dbo.product prd
, вы получите ошибка.
В таких ситуациях измените его на:
select prd.name
from dbo.product prd
Если эта ошибка произошла в UPDATE
, дважды проверьте JOIN
в таблице со столбцом / полем, вызывающим ошибку.
В моем случае это было связано с отсутствием самого JOIN
, который породил ту же ошибку из-за неизвестного поля (как Андрей указал ).
В моем случае проблема оказалась псевдонимом, которое я дал таблице. «oa», по-видимому, неприемлемо для SQL Server.
Вы забыли присоединиться к некоторым столам? Если нет, вам, вероятно, придется использовать некоторые псевдонимы.
Если ни одно из вышеперечисленных действий не работает, попробуйте скопировать известные результаты, которые соответствуют одному из критериев поиска во временную таблицу, а затем выполните соединение на этом.
Я боролся с тем же сообщением об ошибке в SQL SERVER, так как у меня было несколько объединений, изменение порядка соединений было решено для меня.
Вместо этого вы можете попробовать подключиться к таблицам, например,
select
....
from
dkcd
right join
a
, b
Это должно работать
SELECT DISTINCT
phuongxa.maxa ,
quanhuyen.mahuyen ,
phuongxa.tenxa ,
quanhuyen.tenhuyen ,
ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa ,
quanhuyen
LEFT OUTER JOIN ( SELECT khaosat.maxa ,
COUNT(*) AS tong
FROM khaosat
WHERE CONVERT(DATETIME, ngaylap, 103) BETWEEN 'Sep 1 2011'
AND
'Sep 5 2011'
GROUP BY khaosat.maxa
) AS dkcd ON dkcd.maxa = maxa
WHERE phuongxa.maxa <> '99'
AND LEFT(phuongxa.maxa, 2) = quanhuyen.mahuyen
ORDER BY maxa;
Я также боролся с этой ошибкой и оказался в той же стратегии, что и ответ. Я включаю свой ответ, чтобы подтвердить, что это стратегия, которая должна работать.
Вот пример, когда я делаю сначала одно внутреннее соединение между двумя таблицами, которые, как я знаю, получил данные, а затем два левых внешних соединения на таблицах, которые могут иметь соответствующие строки, которые могут быть пустыми. Вы смешиваете внутренние соединения и внешние соединения, чтобы получать результаты с данными по таблицам вместо того, чтобы делать синтаксис по умолчанию, разделенный запятой между таблицами, и пропускать строки в желаемом соединении.
use somedatabase
go
select o.operationid, o.operatingdate, p.pasid, p.name as patientname, o.operationalunitid, f.name as operasjonsprogram, o.theaterid as stueid, t.name as stuenavn, o.status as operasjonsstatus from operation o
inner join patient p on o.operationid = p.operationid
left outer join freshorganizationalunit f on f.freshorganizationalunitid = o.operationalunitid
left outer join theater t on t.theaterid = o.theaterid
where (p.Name like '%Male[0-9]%' or p.Name like '%KFemale [0-9]%')
Сначала: Внутренние соединения между таблицами, которые, как вы ожидаете, будут соответствовать данным. Вторая часть. Продолжайте использовать внешние соединения, чтобы попытаться получить данные в других таблицах, но это не будет отфильтровывать ваш результирующий набор, если внешнее соединение таблицы не имеет соответствующих данных или соответствует условию, которое вы настроили в предикате / состоянии.
Я получал ту же ошибку от JDBC. Проверено все, и мой запрос был в порядке. Оказалось, в where where у меня есть аргумент:
where s.some_column = ?
И значение аргумента, в котором я проходил, было null. Это также дает ту же ошибку, которая вводит в заблуждение, потому что при поиске в Интернете вы оказываетесь в том, что что-то не так с структурой запроса, но это не в моем случае. Просто подумал, что кто-то может столкнуться с тем же вопросом
Моя ошибка состояла в том, чтобы использовать поле, которое не было в таблице.
table1.field1 => не существует
table2.field1 => правильно
Исправить имя таблицы.
моя ошибка произошла из-за использования WITH
WITH RCTE AS (
SELECT...
)
SELECT RCTE.Name, ...
FROM
RCTE INNER JOIN Customer
ON RCTE.CustomerID = Customer.ID
при использовании в соединении с другими таблицами ...